[알고리즘] 파이썬 백준 28432번 끝말잇기

김선은·2024년 3월 30일

알고리즘 문제

목록 보기
4/4

출력을 찍었을 때 예시 출력과 같게 나오는데 인덱스에러가 나서 이것 저것 추가했더니 통과가 되었다.

"?"가 맨 앞에 나오거나 맨 마지막일 경우를 추가했고 코드 마지막의 if를 추가했다. (문제에서 조건을 좀 더 자세히 명시해줬으면 좋겠다...)

풀이

  • 전체 길이대신 N과 M으로 각각 range할 범위를 주니 range로 활용해 for문을 돌려서 리스트에 담기
  • N으로 담은 record 리스트에서 "?"를 찾고 앞 뒤 단어에 해당하는 알파벳을 추리기
  • M으로 담은 후보 candidates에서 record에 not in 조건인 단어를 앞선 알파벳과 동일한지 체크하기
  • "?"가 맨 앞이거나 맨 뒤일 경우를 추가하기.
N = int(input())
record = []

for n in range(N):
    record.append(input())
    
M = int(input())
candidates = []

for m in range(M):
    candidates.append(input())

if "?" in record:
    i = record.index("?") # "?"가 맨 처음일 경우
    if i == 0:
        first_char = ""
    else:
        first_char = record[i - 1][-1] #앞단어 마지막 글자
    
    if i == len(record) - 1: # "?"가 맨 마지막일 경우
        last_char = ""
    else:
        last_char = record[i + 1][0] #뒷단어 첫 글자

    for word in candidates:
        if word not in record:
            if (not first_char or word[0] == first_char) and (not last_char or word[-1] == last_char):
                print(word)

# "?"를 index()로 위치 확인, 앞과 뒤 글자 확인하기
# record에 not in 조건으로 중복 확인하기

헷갈리는 문법 정리하기

if (not first_char or word[0] == first_char) and (이하생략):
    print(word)

if문 안의 'not' 키워드는 뒤에 오는 조건이 False인 경우를 의미.

not first_char or word[0] == first_char
  • first_char가 비어있거나 word의 첫번째 인덱스가 first_char와 동일하다면 True
  • or 키워드가 있기에 두 조건 중 하나라도 True라면 전체 조건을 True로 평가
profile
기록은 기억이 된다

0개의 댓글