데일리 커밋

[백준] 2675번:문자열 반복

snape 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 를 설정해주면 쉽게 가능한 것을...이걸 잊고 있었다니 역시 백준은 꾸준히 해야 한다!!!