세로 읽기

세로 읽기

프로그래머스 파이썬 - 세로 읽기

세로 읽기

문제

세로 읽기

문자열 my_string과 두 정수 mc가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.


제한사항

  • my_string은 영소문자로 이루어져 있습니다.
  • 1 ≤ m ≤ my_string의 길이 ≤ 1,000
  • m은 my_string 길이의 약수로만 주어집니다.
  • 1 ≤ c ≤ m

입출력 예

my_stringmcresult
“ihrhbakrfpndopljhygc”42“happy”
“programmers”11“programmers”

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string을 한 줄에 4 글자씩 쓰면 다음의 표와 같습니다.

    1열2열3열4열
    ihrh
    bakr
    fpnd
    oplj
    hygc

    2열에 적힌 글자를 세로로 읽으면 happy이므로 “happy”를 return 합니다.

입출력 예 #2

  • 예제 2번의 my_string은 m이 1이므로 세로로 “programmers”를 적는 것과 같고 따라서 1열에 적힌 글자를 세로로 읽으면 programmers입니다. 따라서 “programmers”를 return 합니다.

풀이

import math

def solution(my_string, m, c):
    answer = ''
    arr = []
    for i in range(math.ceil(len(my_string) // m)):
        arr.append(list(my_string[i * m: i * m + m]))
    
    for i in arr:
        answer += i[c-1]
    return answer

주어진 m과 문자열 길이를 나누고 그 값에서 반올림을 한 값을 for문으로 반복문을 사용해서 문제 나온것처럼 2차 배열로 만들어서 출력을 했다.

그런데 다른 분의 풀이를 봤는데 참 어렵게 푼 것 같다.

def solution(my_string, m, c):
    return s[c-1::m]

생각을 해보면 파이썬에서는 시작 위치는 c 부터하는데 인덱스는 0부터 시작하니 -1을 해주고 m 칸씩 띄워서 풀면 된다.


© 2021. All rights reserved.

Powered by Hydejack v9.1.6