[백준] CLASS1 - 4

이하나·2022년 1월 7일
0

백준 문제 풀이

목록 보기
4/4

[ 2675 ] 문자열 반복

사용 언어 : 파이썬
문제:
문자열 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글자를 넘지 않는다.  )
제출
1>
repeat = int(input())
# 케이스 개수를 받고,
total = []
for i in range(repeat):
   key = input().split()
   # key에 케이스를 숫자, 문자열로 나누어 리스트로 받아서
   key[0] = int(key[0])
   # 숫자를 정수형으로 해주어
   total.append({key[0]:key[1]})
   # total에 숫자:문자열 형태로 리스트에 넣는다.
for i in range(repeat):
   a = list(total[i])
   # total에서 숫자만을 빼오고,
   b = list(total[i].values())
   # 또 문자열도 빼와서
   b_list = list(b[0])
   # 문자열을 리스트화 시켜서 하나하나 나누어
   a_num = a[0]
   result = []
   for i in b_list:
       result.append(i*a_num)
       # result라는 리스트에 문자열의 요소를 숫자만큼 반복한 것들을 넣는다.
   str_ = ''.join(result)
   # result의 요소들을 모두 공백없이 합쳐서
   print(str_)
   # 프린트한다.

:: 만들고 나니 제대로 동작은 하지만 비효율적인듯 하여 고쳐보았다.

2>
repeat = int(input())
num = []
word = []
for i in range(repeat):
   key, value = input().split()
   # 굳이 리스트로 받아서 딕셔너리로 만들 필요가 없는듯 하여
   # 각자 숫자를 key, 문자열을 value로 받는다.
   num.append(int(key))
   # num이라는 리스트에 받은 숫자들을 넣고,
   word.append(value)
   # 문자열은 word에 넣는다.
for i in range(repeat):
   letters = list(word[i])
   # word에서 문자열을 하나씩 빼와 리스트화 시켜서 letters에 넣는다.
   number = num[i]
   str_ = []
   for i in letters:
       multiple = i*number
       # 문자열의 글자를 숫자만큼 반복한 것을
       str_.append(multiple)
       # str_ 에 넣고
   result = ''.join(str_)
   # 그것들을 모두 공백없이 합쳐서
   print(result)
   # 프린트 해준다.

:: 처음보다 코드의 수는 줄었지만, 아직도 너무 길다.
:: 다른 분들의 코드를 보고 참고하여 좀더 고쳐보았다.

3>
repeat = int(input())
num = []
word = []
for i in range(repeat):
  key, value = input().split()
  # 2차와 마찬가지로 받은 입력값을 각자 바로 key와 value에 할당,
  for i in value:
  # 리스트로 만들지 않고 바로 for문으로 가져와서
      multiple = i*int(key)
      # 글자 하나하나를 빼와 숫자만큼 반복한 뒤,
      print(multiple, end='')
      # 프린트하고 뒤에 end=''를 붙여 공백없이 다음의 반복되는 글자가 출력 되도록 한다.
  print()
  # 다른 케이스의 결과가 다음 줄에 출력되도록 빈 프린트를 하나 넣어준다.

:: 좀더 둘러보던 중 좋은 코드를 발견하여 링크 첨부.
:: https://pacific-ocean.tistory.com/41
:: 참고할 정의 -> 할당연산자

profile
코딩을 배우는 비전공자 코린이!

0개의 댓글