알고리즘/알고리즘_백준

[Python][백준] 1283. 단축키 지정 / 빡구현, 문자열 (S1)

Jerry_K 2024. 10. 29. 01:00

🔗링크 :  

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


🗒️파이썬 코드 풀이

import sys

N = int(input())
shortcut = []

def first_shortcut(str_lst):
    state = 0 
    for i in range(len(str_lst)) : 
        if str_lst[i][0].lower() not in shortcut:
            shortcut.append(str_lst[i][0].lower())
            print_shortcut(str_lst,i,0) 
            state = 1 
            break

    if not(state):
        sequence_shorcut(str_lst)
    

def sequence_shorcut(str_lst):
    state = 0
    for i in range(len(str_lst)):
        for k in range(len(str_lst[i])):
            if str_lst[i][k].lower() not in shortcut:
                shortcut.append(str_lst[i][k].lower())
                print_shortcut(str_lst,i,k)
                state = 1 
                return 
    
    if not(state):
        print(" ".join(str_lst), end =" ")
    
        
def print_shortcut(str_lst,i,k):
    str_lst[i] = str_lst[i][:k] + "[" + str_lst[i][k] + "]" + str_lst[i][k+1:]
    print(' '.join(str_lst), end=" ")

for _ in range(N):
    str_lst = input().split()
    first_shortcut(str_lst)
    print()

 

 

1. 문제의 조건들을 한번에 구현 하기 어렵기 때문에 분할하여 함수로 만든다.

 

2. 여기에서 구현해야 할 함수는 크게 3가지이다. 

  • 단어의 첫글자 단축키 지정
  • 왼쪽부터 오른쪽 순서대로 단축키 지정
  • 출력 함수 

3. first_shortcut 함수 부분 구현

  • state 상태를 표현하는 변수를 선언하고 조건에 만족 못하는 경우 sequence_shorcut 함수 실행
  • 입력받은 문자열을 반복문으로 돌린다.
    • 첫 번째 위치의 단어가 shortcut 리스트에 없는 경우 조건문 실행
    • 해당 단어 shortcut 리스트에 넣어주기
    • print_shortcut 함수 실행

4. print_shortcut 함수 부분 구현

  • str_lst, i (몇 번째 문자열), k (몇 번째 문자) 를 매개 변수로 받음
  • str_lst[i] 문자를 수정하고 전체 출력

5. sequence_shortcut 함수 부분 구현

  • state 상태를 표현하는 변수 선언 후 조건 만족하지 못 할 경우 단어 전체 출력
  • 조건에 만족하는 경우 i,k 를 print_shortcut 함수에 전달

 

📌 문제 코멘트 

쉬운 문제인 줄 알았는데, 많은 시간을 들였다 ...
빡구현은 답을 봐도 크게 도움이 되지 않는다 ㅠㅠ 
그래도 확실한 것은 이런 빡구현 문제는 무조건 쪼개서 풀어야 한다는 것 !! 

 


📚문제

한글 프로그램의 메뉴에는 총 N개의 옵션이 있다. 각 옵션들은 한 개 또는 여러 개의 단어로 옵션의 기능을 설명하여 놓았다. 그리고 우리는 위에서부터 차례대로 각 옵션에 단축키를 의미하는 대표 알파벳을 지정하기로 하였다. 단축키를 지정하는 법은 아래의 순서를 따른다.

  1. 먼저 하나의 옵션에 대해 왼쪽에서부터 오른쪽 순서로 단어의 첫 글자가 이미 단축키로 지정되었는지 살펴본다. 만약 단축키로 아직 지정이 안 되어있다면 그 알파벳을 단축키로 지정한다.
  2. 만약 모든 단어의 첫 글자가 이미 지정이 되어있다면 왼쪽에서부터 차례대로 알파벳을 보면서 단축키로 지정 안 된 것이 있다면 단축키로 지정한다.
  3. 어떠한 것도 단축키로 지정할 수 없다면 그냥 놔두며 대소문자를 구분치 않는다.
  4. 위의 규칙을 첫 번째 옵션부터 N번째 옵션까지 차례대로 적용한다.

입력

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

출력

N개의 줄에 각 옵션을 출력하는데 단축키로 지정된 알파벳은 좌우에 [] 괄호를 씌워서 표현한다.

예제 입력 1 복사

5
New
Open
Save
Save As
Save All

예제 출력 1 복사

[N]ew
[O]pen
[S]ave
Save [A]s
Sa[v]e All

예제 입력 2 복사

8
New window
New file
Copy
Undo
Format
Font
Cut
Paste

예제 출력 2 복사

[N]ew window
New [f]ile
[C]opy
[U]ndo
F[o]rmat
Fon[t]
Cut
[P]aste