[프로그래머스] 49. 세로 읽기

최재원's avatar
Apr 10, 2025
[프로그래머스] 49. 세로 읽기
💡
문자열 my_string과 두 정수 mc가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
💡

제한사항

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

입출력 예

my_string
m
c
result
"ihrhbakrfpndopljhygc"
4
2
"happy"
"programmers"
1
1
"programmers"

입출력 예 설명

입출력 예 #1
  • 예제 1번의 my_string을 한 줄에 4 글자씩 쓰면 다음의 표와 같습니다.
1열
2열
3열
4열
i
h
r
h
b
a
k
r
f
p
n
d
o
p
l
j
h
y
g
c
2열에 적힌 글자를 세로로 읽으면 happy이므로 "happy"를 return 합니다.
입출력 예 #2
  • 예제 2번의 my_string은 m이 1이므로 세로로 "programmers"를 적는 것과 같고 따라서 1열에 적힌 글자를 세로로 읽으면 programmers입니다. 따라서 "programmers"를 return 합니다.
 

코드

class Solution { public String solution(String my_string, int m, int c) { char[] charArr = new char[my_string.length()/m]; for(int i = 0; i < (my_string.length()/m); i++) { charArr[i] = my_string.charAt(i * m + (c - 1)); } return new String(charArr); } }
notion image

설명

my_string / m을 하면 줄 수를 구할 수 있다.
즉, 문자열을 m글자씩 잘라서 한 줄에 적었을 때, 총 몇 줄이 되는지 알 수 있다.
예를 들어 첫 번째 예시를 보면,
  • my_string = "ihrhbakrfpndopljhygc"
  • m = 4
    • → 줄 수는 20 / 4 = 5줄
이렇게 5줄로 나누면 각 줄은 4글자씩 되고,
우리는 이 줄들을 위에서부터 아래로 읽으면서 왼쪽에서 c번째 열에 있는 글자만 골라서 새로운 문자열을 만들어야 한다.
예를 들면:
  • 0번째 줄에서 가져올 글자의 인덱스는 0 * 4 + (c - 1)
  • 1번째 줄은 1 * 4 + (c - 1)
  • 2번째 줄은 2 * 4 + (c - 1)
  • ...
즉, i * m + (c - 1) 이 공식대로 인덱스를 구해서
그 위치의 글자를 하나씩 가져오면 된다.
그렇게 가져온 글자들을 순서대로 붙이면
문제에서 원하는 결과가 된다.
 
Share article

jjack1