[Python] BOJ 1283 - 단축키 지정(IZBORNIK)

728x90
반응형

https://www.acmicpc.net/problem/1283

 

1283번: 단축키 지정

첫째 줄에 옵션의 개수 N(1 ≤ N ≤ 30)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 옵션을 나타내는 문자열이 입력되는데 하나의 옵션은 5개 이하의 단어로 표현되며, 각 단어 역시 10개 이하

www.acmicpc.net

쉬워보여서 덤볐는데, 생각보다 구현과 문자열 처리가 힘들어서 애먹은 문제이다.

 

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할 때 진짜 유용하게 많이 쓰이는 것 같다.

728x90
반응형

'문제풀이 > 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
TAGS.

Comments