새소식

Algorithm/코딩테스트

[백준 1283] 단축키 지정(구현,문자열) - Python

  • -

🌵 문제

 

 

🌵문제풀이

문제의 목표는 입력(단어 혹은 구(둘 이상의 단어))이 주어졌을 때, 단축키를 지정하는 것이다.

단축키를 지정하는 기준은 아래와 같다.

1. 단축키는 첫 글자를 우선적으로 검사하여 아직 사용되지 않은 알파벳을 찾아서 지정한다.
2. 만약 첫 글자가 모두 사용되었다면, 각 단어의 글자들을 검사하여 단축키를 지정한다.

 

 

단축키를 지정하기 위한 로직은 다음과 같이 세웠다.

  1. 단축키 목록 초기화: 이미 사용된 단축키를 기록할 리스트를 만들기
  2. 각 입력 처리
    • 첫 글자가 이미 사용된 단축키 목록에 없는 경우 => 해당 글자를 단축키로 지정
    • 모든 단어의 첫 글자가 이미 사용된 경우=> 각 글자를 검사하여 사용되지 않은 단축키를 찾아서 적용
    • 어떤 것도 지정할 수 없는 경우, 해당 옵션을 원래대로 출력

 

🌵코드

N = int(input())
word_lst = [] # 옵션(단어 입력)을 저장할 리스트
shortcuts= [] # 사용된 단축키 목록
tup_lst = [] # 단축키 지정 여부를 기록할 리스트

# 입력받은 옵션을 단어 단위로 리스트에 저장
for _ in range(N):
    word_lst.append(input().split())

# 각 옵션에 대해 단축키를 지정
for lst in word_lst:
    for i in range(len(lst)):
     # 단축키를 첫 글자부터 찾기
        if lst[i][0].lower() not in shortcuts:
            shortcuts.append(lst[i][0].lower())
            tup_lst.append((lst[i][0],lst))
            
             # 첫 글자를 단축키로 지정
            lst[i] = lst[i].replace(lst[i][0],"[" + lst[i][0] + "]",1)
            
            print(" ".join(lst))
            break


# 첫 글자가 모두 사용된 경우
    if lst not in tup_lst[-1]:
        for i,word in enumerate(lst):
            if lst not in tup_lst[-1]:
                #print("word",word)
                for char in word:
                    if char.lower() not in shortcuts:
                        shortcuts.append(char.lower())
                        tup_lst.append((char,lst))
                        word = word.replace(char,"[" + char + "]",1)
                        lst[i] = word   
                        print(" ".join(lst))
                        break     
      # 단축키가 지정되지 않은 경우          
    if lst not in tup_lst[-1]:
        tup_lst.append((-1,lst))
        print(" ".join(lst))

 

 

🌵문법

replace() 함수

Python의 replace() 함수는 문자열에서 특정 부분을 다른 부분으로 바꿀 때 사용되는 매우 유용한 함수이다.

이 함수는 원본 문자열을 수정하지 않고, 수정된 새로운 문자열을 반환한댜. (원본 문자열은 변경x)

 

replace() 함수 기본 문법

str.replace(old, new, count)
  • str: 원본 문자열
  • old: 교체하고자 하는 문자열
  • new: 새로 대체할 문자열
  • count: (선택 사항) 바꾸고자 하는 횟수(지정하지 않으면 문자열 내의 모든 old 문자열을 new 문자열로 교체)

replace() 함수는 기본적으로 대소문자를 구분한다.

 

코드에서 적용된 예시

lst[i] = lst[i].replace(lst[i][0], "[" + lst[i][0] + "]", 1)

 

  • lst[i][0]: 현재 단어의 첫 글자
  • "[" + lst[i][0] + "]": 첫 글자를 []로 감싸는 새로운 문자열
  • count = 1: 해당 단어에서 첫 번째로 등장하는 글자만 교체

즉, 이 코드의 목적은 단어의 첫 글자를 찾아 [글자] 형태로 바꾸는 것!

ex) lst[i] =  "Save"

 replace() 함수를 통해 "S"가 "[S]"로 변경된다. => [S]ave

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.