잡동사니 블로그
[백준] 1474 - 밑 줄 (python) 본문
문제
세준이는 N개의 영어 단어를 이용해 길이가 M인 새로운 단어를 만들려고 한다. 새로운 단어는 N개의 단어를 순서대로 이어 붙이고, 각 단어의 사이에 _을 넣어서 만든다. 이렇게 만든 새로운 단어의 길이가 M이 아닌 경우 _를 추가해서 길이가 M이 되게 만들어야 한다.
- _는 단어와 단어 사이에만 추가할 수 있다. 따라서, 새로운 단어는 _으로 시작하거나, _로 끝날 수 없다.
- 단어와 단어 사이에 있는 _의 개수는 모두 같아야 한다.
- 모두 같게 만드는 것이 불가능한 경우 단어와 단어 사이에 있는 _의 개수의 최댓값과 최솟값의 차이는 1이 되어야 한다.
새로운 단어 중 사전 순으로 가장 앞서는 단어를 구해보자.
입력
첫째 줄에 N과 M이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다.
출력
첫째 줄에 사전 순으로 가장 앞서는 단어를 출력한다.
알파벳 대문자, 소문자, 밑 줄의 순서는 'A' < 'B' < 'C' < ... < 'Z' < '_' < 'a' < 'b' < 'c' < ... < 'z' 이다.
제한
- 2 ≤ N ≤ 10
- 3 ≤ M ≤ 200
- 단어는 알파벳 소문자, 대문자로만 이루어져 있다.
- 1 ≤ 단어의 길이 ≤ 10
- 단어 N개 길이의 합을 len이라고 했을 때, len+N-1 ≤ M을 만족한다.
예제 입력 1
9 50
A
quick
brown
fox
jumps
over
the
lazy
dog
예제 출력 1
A___quick__brown__fox__jumps__over__the__lazy__dog
예제 입력 2
5 32
Alpha
Beta
Gamma
Delta
Epsilon
예제 출력 2
Alpha_Beta_Gamma__Delta__Epsilon
예제 입력 3
4 29
Hello
world
John
said
예제 출력 3
Hello____world___John____said
풀이
a, b = map(int, input().split())
total = []
cnt = 0
flag = 0
so = []
da = []
for i in range(a):
c = input()
cnt += len(c)
total.append(c)
if i != 0:
if c[0].isupper() == True:
da.append(c)
else :
so.append(c)
q = da+so
length = b-cnt
oo = length % len(q)
nn = length // len(q)
ans=''
flag = 0
for i in total[1:]:
if i in so and oo != 0:
oo -= 1
ans += ('_'*(nn+1))+i
flag += 1
elif len(total[1:]) - flag == oo :
ans += ('_'*(nn+1))+i
else :
ans += ('_'*nn)+i
flag += 1
print(total[0]+ans)
'A' < 'B' < 'C' < ... < 'Z' < '_' < 'a' < 'b' < 'c' < ... < 'z'
부분이 정말 헷갈려서 힘들었던 문제.
대문자와 소문자 리스트를 따로 만들었고, (만들어야 하는 단어의 길의 - 원래 단어의 길이)하여 밑줄의 개수를 구한 뒤, 첫 단어를 제외한 다음 단어의 시작이 소문자 일 경우엔 _를 하나 더 추가 하거나, 전부 대문자인 경우 마지막에서 추가하도록 하며, 중간에 대문자가 있을 경우 생략하여 되도록 소문자 앞에 _를 추가하는 식으로 함.
'Python > 백준' 카테고리의 다른 글
[백준] 13305 - 주유소 (python) (0) | 2023.02.11 |
---|---|
[백준] 1343 - 폴리오미노 (python) (0) | 2023.02.10 |
[백준] 1316 - 그룹 단어 체커 (python) (0) | 2023.01.21 |
[백준] 1018 - 체스판 다시 칠하기 (python) (0) | 2023.01.16 |
[백준] 1541 - 잃어버린 괄호 (python) (0) | 2023.01.15 |