728x90
Overview
- 체감 난이도: ★☆☆☆☆
- 문제 레벨: Lv.2
- 풀이 상태: 답안참고 / 스스로 해결
- 추후: 다시 풀어보기 / 간단 복습 / 완벽 이해
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[배운 점]
any(...): any() 함수는 반복문의 결과 중 하나라도 True가 있을 때 True를 반환한다.
즉, dct의 어느 리스트에 words[i]가 있다면 any()는 True가 되어 조건이 충족된다. 반면, 모든 리스트에 words[i]가 없다면 any()는 False를 반환한다.
[코드]
초기 코드
- 단어가 한 글자이거나 이전 단어 끝과 현재 단어의 처음이 다르거나, 이전에 추가한 단어와 같은 경우 return 해줌
def solution(n, words):
dct = {i: [] for i in range(n)}
cnt, rank = 0, 1
for i in range(len(words)):
d = i % n
if i == 0:
dct[d].append(words[i])
else:
w1, w2 = words[i-1], words[i]
if len(w2) <= 1 or w1[-1] != w2[0] or any(words[i] in lst for lst in dct.values()):
return [d+1, rank]
else:
dct[d].append(words[i])
cnt += 1
if cnt == n:
rank += 1
cnt = 0
return [0,0]
정리된 코드
def solution(n, words):
dct = {i: [] for i in range(n)} # 딕셔너리에 배열 추가하기 위함
rank = 1
for i in range(len(words)):
d = i % n
current_word = words[i]
# 끝말잇기 규칙 확인
if i > 0:
previous_word = words[i - 1]
# 단어가 한 글자 or 이전 단어의 끝과 일치하지 않는 경우 or 이전에 추가한 단어일 경우
if len(current_word) <= 1 or previous_word[-1] != current_word[0] or \
any(current_word in lst for lst in dct.values()):
return [d + 1, rank]
# 단어 추가
dct[d].append(current_word)
# 한 라운드가 끝날 때마다 순위 증가
if (i + 1) % n == 0:
rank += 1
return [0, 0]
반응형
'🚩 Coding Test > Programmers' 카테고리의 다른 글
[Programmers][Python] Lv.2 석유 시추 (0) | 2024.10.29 |
---|---|
[Programmers][Python] Lv.2 퍼즐 게임 챌린지 (1) | 2024.10.27 |
[Programmers][Python] Lv.2 짝지어 제거하기 (0) | 2024.10.23 |
[Programmers][Python][PCCP] Lv.1 붕대 감기 (0) | 2024.10.19 |
[Programmers][Python] 네트워크 (0) | 2024.10.16 |