개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • Books (13)
      • 읽기 좋은 코드가 좋은 코드다 (13)
    • Study (6)
      • Blockchain (3)
      • Algorithm (3)
    • Baekjoon (36)
    • Programmers (166)
    • LeetCode (15)
    • Open Source (1)
      • Youtube Popout Player (1)
    • Language (32)
      • Python (9)
      • JS (8)
      • Java (5)
      • HTML (6)
      • CSS (4)
    • Library & Framework (15)
      • React.js (15)
    • IDE (2)
      • IntelliJ (2)
    • Airdrop (9)
    • Tistory (2)
    • etc.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

  • Java
  • 클린 코드 작성법
  • Cozubi
  • 파이썬
  • programmers
  • 코딩테스트연습
  • 읽기 좋은 코드가 좋은 코드다
  • 코주비
  • 프로그래머스 위클리 챌린지
  • 카카오 공채
  • 클린 코드
  • 백준
  • Python
  • 신규 코인 에어드랍
  • 프로그래머스
  • 카카오 코딩테스트
  • 카카오 알고리즘 문제
  • 코인줍줍
  • 알고리즘문제풀이
  • 2018 KAKAO BLIND RECRUITMENT

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

[리트코드] 6. ZigZag Conversion / Javascript
LeetCode

[리트코드] 6. ZigZag Conversion / Javascript

2021. 9. 7. 21:35
반응형

문제주소 : https://leetcode.com/problems/zigzag-conversion/

 

ZigZag Conversion - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


<문제 설명>

더보기

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P A H N A P L S I I G Y I R

And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string s, int numRows);

 

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I

Example 3:

Input: s = "A", numRows = 1 Output: "A"

 

Constraints:

  • 1 <= s.length <= 1000
  • s consists of English letters (lower-case and upper-case), ',' and '.'.
  • 1 <= numRows <= 1000

 

<풀이법>

▒ 한줄 개념: 인덱스 계산 ▒ 

얼핏보면 복잡해보이지만 단순 인덱스 계산 문제입니다.

Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" 을 예로 들어보겠습니다. 아래와 같은 결과가 나와야합니다.

결과를 2차원 배열로 적어보면, 다음과 같습니다.

[
  [P, A, H, N],
  [A, P, L, S, I, I, G],
  [Y, I, R]
]

위 배열을 groups 라고 했을 때, PAYPALISHIRING은 groups 배열에 아래와 같이 삽입됩니다.

P -> groups[0]에 삽입

A -> groups[1]에 삽입

Y -> groups[2]에 삽입

P -> groups[1]에 삽입

A -> groups[0]에 삽입

L -> groups[1]에 삽입

I -> groups[2]에 삽입

S -> groups[1]에 삽입

H -> groups[0]에 삽입

...

 

이렇게 보면 규칙이 쉽게 보입니다. groups에 삽입하게 될 인덱스 값이 0, 1, 2, 1, 0, 1, 2 ... 의 식으로 numRows 값을 기준으로 작아졌다 커졌다를 반복하는 것입니다.

위처럼 2차원 배열로 만들어주고, 순서대로 join하여 주면 정답이 쉽게 완성됩니다.

 

<코드(Javascript)>

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
    let count = 0;
    let countUp = true;
    const groups = [];
    for(let i = 0; i < numRows; i++){
        groups.push([]);
    }
    s.split('').map(char => {
        groups[count].push(char);
        if(countUp){
            count++;
            if(count === numRows){
                count = numRows < 2 ? 0 : count-2;
                countUp = !countUp;
            }
        }else{
            count--;
            if(count === -1){
                count = numRows < 2 ? 0 : count+2;
                countUp = !countUp;
            }
        }
    })
    return groups.reduce((acc, cur) => {
        return acc + cur.join('');
    }, '');
};

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형
저작자표시 (새창열림)

'LeetCode' 카테고리의 다른 글

[리트코드] 1130. Minimum Cost Tree From Leaf Values / Javascript  (0) 2021.09.08
[리트코드] 1647. Minimum Deletions to Make Character Frequencies Unique / Javascript  (0) 2021.09.08
[리트코드] 142. Linked List Cycle II / Javascript  (0) 2021.06.08
[리트코드] 141. Linked List Cycle / Javascript  (0) 2021.06.08
[리트코드] 139. Word Break / Javascript  (0) 2021.06.07
    'LeetCode' 카테고리의 다른 글
    • [리트코드] 1130. Minimum Cost Tree From Leaf Values / Javascript
    • [리트코드] 1647. Minimum Deletions to Make Character Frequencies Unique / Javascript
    • [리트코드] 142. Linked List Cycle II / Javascript
    • [리트코드] 141. Linked List Cycle / Javascript
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바