[Python] BOJ 1283 - 단축키 지정(IZBORNIK)
https://www.acmicpc.net/problem/1283
쉬워보여서 덤볐는데, 생각보다 구현과 문자열 처리가 힘들어서 애먹은 문제이다.
1. dic이라는 int형의 defaultdic을 만든다.
2. 입력받는 문자열을 공백 단위로 끊어서 s에 저장한다.
3. s에 저장된 문자열을 돌며 단축키를 지정한다.
3-1. 만약 tf가 True이면 앞의 단어에서 단축키가 설정되었으므로 단어를 tmp에 넣는다.
3-2. 만약 단어의 첫글자가 dic에 있다면(이미 단축키로 지정되어 있을때), cnt를 1증가시키고
단어를 tmp에 넣는다
3-3. 만약 단어의 첫글자가 dic에 없고 tf가 False라면, 새로운 단축키를 지정해준다.
-> 첫글자를 [첫글자]로 바꾼뒤 tmp에 저장하고 dic에 첫글자를 넣고 tf를 True로 바꿔준다.
(replace를 하면 첫 글자와 같은 모든 단어가 바뀌므로 첫 단어만 바꾸도록 replace에 마지막에
1을 인자로 넘겨줬다.)
4. 만약 cnt == len(s)이면 모든 단어의 첫글자가 단축키인 경우이다. 이 때는 다시 처음으로 돌아와
단어마다 반복문을 돌아야 한다.
4-1. tmp를 비우고 단어마다 돌며 3번 과정과 마찬가지로 단축키를 설정한다.
5. 최종적으로 dab배열에 tmp를 넣고 출력한다.
import sys
from collections import defaultdict
input = sys.stdin.readline
dab = []
dic = defaultdict(int)
for _ in range(int(input())):
s = input().split()
tmp = []
cnt = 0
tf = False
for i in s:
if tf:
tmp.append(i)
continue
if i[0].upper() in dic:
cnt += 1
tmp.append(i)
elif i[0].upper() not in dic and not tf:
tmp.append(i.replace(i[0], '['+i[0]+']', 1))
dic[i[0].upper()] += 1
tf = True
if cnt == len(s):
tmp = []
for i in s:
cnt = 0
if tf:
tmp.append(i)
continue
for j in i:
if j.upper() in dic:
cnt += 1
if cnt == len(i):
tmp.append(i)
elif not tf and j.upper() not in dic:
tf = True
dic[j.upper()] += 1
tmp.append(i.replace(j, '['+j+']', 1))
continue
dab.append(' '.join(tmp))
for i in dab:
print(i)
(solved.ac 티어: 실버 3)
# defaultdict이 PS할 때 진짜 유용하게 많이 쓰이는 것 같다.
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 1904 - 01타일 (0) | 2021.05.14 |
---|---|
[Python] BOJ 3184 - 양(ovce) (0) | 2021.04.27 |
[Python] BOJ 3190 - 뱀(zmija) (0) | 2021.04.14 |
[Python] BOJ 2589 - 보물섬 (0) | 2021.04.13 |
[Python] BOJ 18110 - solved.ac (0) | 2021.04.12 |