ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 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

    댓글

Designed by Tistory.