[algorithm] 백준 단계별 문제 풀이 (문자열 2탄)
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 백준 단계별 문제 중 문자열을 다루는 문제들을 살펴보려합니다.
파이썬3 를 사용해 문제 풀이를 진행하겠습니다.
문제마다 링크를 걸어두었으니 문제를 살펴보시고 문제를 푼 다음에 저와
풀이를 비교해 보시는 걸 추천드립니다.
차근차근 풀어봅시다.

백준 BAEKJOON 2675
https://www.acmicpc.net/problem/2675
2675번: 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다
www.acmicpc.net
문제 해석
각 줄마다 반복 횟수, 공백, 문자열 이 주어지면 문자열의 각 글자마다 반복 횟수만큼 출력하는 문제
풀이
import sys
n = int(sys.stdin.readline().rstrip())
for _ in range(n):
a, b = map(str, sys.stdin.readline().rstrip().split())
for i in b:
print(i*int(a),end='')
print()
풀이 해석 및 팁
map() 함수를 이용해 공백을 기준으로 a와 b에 문자열 형태로 입력값을 나눠서 대입합니다.
for 문을 이용해 b 문자열에 접근하면서 각 글자마다 a번씩 곱해서 출력합니다.
print() 함수안에 end=''를 넣어주면 출력물 끝에 개행문자가 아닌 ''(아무것도 안쓰여져있음)가 붙게 됩니다.
백준 BAEKJOON 1157
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제 해석
알파벳 대소문자로 이루어진 문자열에서 가장 많이 사용된 알파벳을 출력하는 문제
풀이
import sys
s = sys.stdin.readline().rstrip().upper()
a = list(set(s))
b = []
for i in a:
b.append(s.count(i))
if b.count(max(b)) > 1:
print('?')
else:
print(a[b.index(max(b))])
풀이 해석 및 팁
문자열을 입력받을 때 upper() 함수를 사용해 모두 대문자로 대입받습니다.
그리고 set() 함수를 사용해 중복값을 제거합니다.
count() 함수를 통해 본 문자열에서 각 알파벳이 몇개씩 존재하는지를 체크하기위해 b 리스트에 추가해줍니다.
b 리스트에서 최댓값을 찾고 최댓값인 요소의 개수가 1개 이상이라면 ?를 출력하고
아니라면 해당 알파벳을 출력해줍니다.
백준 BAEKJOON 1152
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
문제 해석
단순하게 문자열이 몇개의 단어로 이루어져있는가(공백+1)를 출력하는 문제
풀이
import sys
s = sys.stdin.readline().rstrip().split()
print(len(s))
풀이 해석 및 팁
입력받은 문자열에 split() 함수를 붙여서 공백을 기준으로 각 단어를 리스트로 변환해 대입합니다.
그리고 리스트의 길이를 출력하면 문제 해결
## split() 함수의 내용#################
(method) def split(
sep: str | None = None,
maxsplit: SupportsIndex = -1
) -> list[str]
##################################
백준 BAEKJOON 2908
https://www.acmicpc.net/problem/2908
2908번: 상수
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두
www.acmicpc.net
문제 해석
공백을 기준으로 3자리수를 두개 입력받은 뒤 순서를 뒤집었을 때 더 큰수를 출력하는 문제
풀이
import sys
a, b = map(int, ("".join(reversed(sys.stdin.readline().rstrip()))).split())
print(a if a > b else b)
풀이 해석 및 팁
a, b = map(int, ("".join(reversed(sys.stdin.readline().rstrip()))).split())
위 코드를 하나 하나 살펴보겠습니다.
입력값으로 123 456 이 들어온다고 가정했을 때
str = sys.stdin.readline().rstrip() # str에는 123 456 로 대입됨 (문자열)
str2 = reversed(str) # str2에 654 321 로 저장되어있음 (reversed 객체임)
str3 = "".join(str2) # str3에 654 321 로 대입됨 (문자열)
a, b = map(int, str3.split()) # 공백을 기준으로 a와 b에 정수형으로 대입됨
현재 a에는 654 b에는 321이 대입된 상황입니다.
print(a if a > b else b)
위 코드는 다음과 같이 동작합니다.
a>b의 결과가 참이면 a를 출력 거짓이면 b 출력
백준 BAEKJOON 5622
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
문제 해석
다이얼 전화기로 원하는 번호에 전화를 걸 때 걸리는 시간을 출력하는 문제
각 번호에는 알파벳의 범위가 지정되어있고 문제에서 알파벳이 주어지면 해당되는 숫자를 찾아서
다이얼로 입력할 때 총 얼마나 시간이 걸리는지를 계산해야합니다.
숫자 1을 입력할 때 2초가 걸리고 숫자가 하나 커질 때 마다 1초가 더 걸립니다.
풀이
import sys
s = sys.stdin.readline().rstrip()
# 각 알파벳이 속한 숫자를 딕셔너리로 정의
dic = {'A':2, 'B':2, 'C':2, 'D':3, 'E':3, 'F':3, 'G':4, 'H':4, 'I':4,
'J':5, 'K':5, 'L':5, 'M':6, 'N':6, 'O':6, 'P':7, 'Q':7, 'R':7,
'S':7, 'T':8, 'U':8, 'V':8, 'W':9, 'X':9, 'Y':9, 'Z':9}
total = 0
# 입력값으로 들어온 문자열에 차례대로 접근해서 걸리는 시간의 총합을 구함
for i in s:
total += dic.get(i)+1
print(total)
풀이 해석 및 팁
딕셔너리 dic에 각 알파벳을 키로 설정하고 속하는 숫자를 값으로 설정합니다.
딕셔너리에 get(key) 를 사용해 값을 받아서 사용하는것을로 문제를 해결했습니다.
백준 BAEKJOON 11718
https://www.acmicpc.net/problem/11718
11718번: 그대로 출력하기
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시
www.acmicpc.net
문제 해석
문제의 제목 그대로 읽어온 입력값을 그대로 출력하는 문제입니다.
풀이
while True:
try:
print(input())
except:
break
풀이 해석 및 팁
입력값이 얼마나 주어지는지 알 수 없기에 반복문을 무한루프로 돌리면서 try except 문을 사용해
입력값이 존재하지않을 때 반복문을 멈추는 방법으로 문제를 해결합니다.
여기까지 백준 단계별 문제 문자열 2탄의 풀이였습니다.
문제를 풀면서 문자열을 다양하게 다루어보았습니다.
본인에게 맞는 방법을 찾으셨으면 스타일을 잘 만들어가시면 좋을 것 같습니다.
못 찾으셨다면 자신이 다루기 편한 방법이 생길 때 까지 여러 방법을 시도해보시길 바랍니다.
궁금하신점이나 도움이 필요한 부분이 있다면 댓글로 남겨주시바랍니다.
감사합니다.
'programming > algorithm' 카테고리의 다른 글
[algorithm] 백준 단계별 문제 풀이 (심화 2탄) (0) | 2023.03.02 |
---|---|
[algorithm] 백준 단계별 문제 풀이 (심화 1탄) (0) | 2023.03.01 |
[algorithm] 백준 단계별 문제 풀이 (문자열 1탄) (0) | 2023.02.23 |
[algorithm] 백준 단계별 문제 풀이 (함수) (0) | 2023.02.18 |
[ algorithm ] 백준 단계별 문제 풀이 (1차원 배열 2탄) (0) | 2023.02.15 |