블로그 메뉴

    Tonkatsu
    Developer Lee
    Tonkatsu
    전체 방문자
    오늘
    어제
    • 분류 전체보기 (52)
      • Frontend (7)
        • React (3)
        • JavaScript (3)
        • HTML\CSS (1)
        • etc (0)
      • Backend (0)
        • Python\Django (0)
        • etc (0)
      • CS (32)
        • Algorithm\Coding Test (19)
        • Computer Science (8)
        • devops (5)
        • etc (0)
      • Languages (5)
        • Javascript (5)
        • Python (0)
        • etc (0)
      • 비상다반 (3)
      • 학원 (4)

    인기 글

    태그

    • javascript
    • CSS
    • merge
    • 백준
    • 프론트엔드
    • 자바스크립트
    • 프로그래머스
    • 코테
    • BFS
    • 코딩테스트
    • HTML
    • js
    • leetcode
    • DFS
    • 네트워크
    • CS
    • Push
    • Git
    • 리트코드
    • fetch

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Tonkatsu

    Developer Lee

    LeetCode : 6 - javascript
    CS/Algorithm\Coding Test

    LeetCode : 6 - javascript

    2021. 12. 23. 06:41

    https://leetcode.com/problems/zigzag-conversion/

     

    6. Zigzag Conversion
     

    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

     

    풀이

     

    주어진 문자열을 지그재그 형태로 배열하고 이를 다시 첫 row부터 순서대로 출력하는 문제이다.

    따라서 주어진 numRows의 1차원 배열을 가진 2차원 배열을 만들고 이를 층으로 생각했다.

     

    중요한 것은 문자열의 i번째 문자를 몇 번째 배열에 넣는가 이다.

    numRows가 1증가하면 2개의 문자가 추가로 위에 배치되므로 이를 토대로 새로운 인덱스를 

    let index = i % (2 * numRows - 2)

    2 * (numRows - 1) - index 로 만들어줬다.

    그리고 index에 맞춰서 배열에 넣으면 지그재그 순서로 들어간다.

     

    var convert = function (s, numRows) {
      if (numRows === 1) return s;
      let answer = [];
      for (let i = 0; i < numRows; i++) {
        answer.push([]);
      }
      s = s.split("");
      s.forEach((x, i) => {
        let index = i % (2 * numRows - 2);
        if (index >= numRows) index = 2 * (numRows - 1) - index;
        answer[index].push(x);
      });
      answer = answer.map((x) => x.join(""));
      return answer.join("");
    };

     

    저작자표시 (새창열림)

    'CS > Algorithm\Coding Test' 카테고리의 다른 글

    프로그래머스 : 신고 결과 받기 - javascript  (0) 2022.01.18
    프로그래머스 : 거리두기 확인하기-javascript  (0) 2022.01.04
    프로그래머스 : 다리를 지나는 트럭-javascript  (0) 2021.12.22
    프로그래머스 : H-index-javascript  (2) 2021.12.20
    프로그래머스 : 소수 찾기-javascript  (0) 2021.12.20
      'CS/Algorithm\Coding Test' 카테고리의 다른 글
      • 프로그래머스 : 신고 결과 받기 - javascript
      • 프로그래머스 : 거리두기 확인하기-javascript
      • 프로그래머스 : 다리를 지나는 트럭-javascript
      • 프로그래머스 : H-index-javascript
      Tonkatsu
      Tonkatsu
      한 번 뿐인 인생 편하게 살고싶지만 그러려면 열심히 살아야 되니까 열심히 살려고 노력은 하지만 편하게 사는 사람

      티스토리툴바