-
[백준] 2675번:문자열 반복데일리 커밋 2022. 1. 1. 16:07
https://www.acmicpc.net/problem/2675
2675번: 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다
www.acmicpc.net
문제
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.
출력
각 테스트 케이스에 대해 P를 출력한다.
예제 입력 1 복사
2 3 ABC 5 /HTP
예제 출력 1 복사
AAABBBCCC /////HHHHHTTTTTPPPPP
풀이
첫 번째 시도
r, s = input().split() p = [] for i in s: p.append(i*int(r))
횟수와 문자열을 입력 받고 별도로 변수 저장 후 조건에 맞추어 list로 넣어주면 되지 않을까 생각했다.
다만 출력을 안 했다는 어이없는 실수가..
두 번째 시도
r, s = input().split() a = s[0]*int(r) for i in s[1:]: a += (i*int(r)) print(a)
이번엔 확실하게 출력문을 추가했다. 하지만 출력에 따른 결과문이 내 생각과는 달랐다.
aaa, bbb, ccc 이런 형식으로 출력이 되어 이것을 어떻게 할까 고민을 하다가
세 번째 시도
r, s = input().split() a = s[0]*int(r) for i in s[1:]: a += (i*int(r)) print(*a)
*를 사용하여 리스트를 분해?했다. 쉼표는 없어졌지만 공백이 생겨 원하는 결과는 아니었다.
출력 결과
aaa bbb ccc
네 번째 시도(정답)
num = int(input()) for i in range(num): r, s = input().split() a = s[0]*int(r) for i in s[1:]: a += (i*int(r)) print(a)
어떻게 할까 고민하면서 문제를 다시보니 애초에 내가 실수한 부분이 하나 발견되었다. 몇 번을 입력 할 것인가에 대한 횟수도 입력을 받아야 하는데 놓친 것!
고민 끝에 생각한 것은 문자열을 더 하면 뒤에 붙여지니까 그냥 문자열로 만들어야겠다는 생각을 했다. 이로써 문제는 해결!
다만 이런 비효율적인 방법 말고 더 좋은 방법이 없을까 고민하다가 간단한 방법을 발견!
효율적인 코드!
T = int(input()) # 테스트 케이스 개수 for i in range(T): R, S = input().split() # 각각 반복횟수, 문자열 - 테스트 케이스 개수만큼 반복해야하므로 for문 안으로! for j in S: print(j * int(R), end='') print() # 줄 바꾸기
end 를 설정해주면 쉽게 가능한 것을...이걸 잊고 있었다니 역시 백준은 꾸준히 해야 한다!!!
'데일리 커밋' 카테고리의 다른 글
[백준] 1157번: 단어 공부 (0) 2022.01.07 [백준] 10809번: 알파벳 찾기 (0) 2022.01.06 [백준] 2908번: 상수 (0) 2022.01.05 [백준] 1152번: 단어의 개수 (0) 2022.01.04 [백준] 2920번: 음계 (0) 2022.01.01