- 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12981
- 풀이
def solution(n, words):
li = [words[0]]
for x in range(0, len(words) - 1):
li.append(words[x + 1])
se = set(li)
if (words[x].strip()[-1] != words[x + 1].strip()[0]) | (len(li) != len(se)):
# 끝말을 잇지 않았을 때 or 중복된 단어일 때
num1 = (x + 2) % n
if num1 == 0:
num1 = n
if num1 == n:
num2 = int((x + 2) / n)
else:
num2 = int((x + 2) / n) + 1
return [num1, num2]
return [0, 0]
배열 words을 반복문 돌린다.
그 전에 li = [words[0]]을 선언하고 시작한 이유는 반복문 안에서 li.append(words[x + 1]) 을 하는데 이러면 0번째 요소는 들어갈 수가 없다. 근데 0번째는 무조건 잘못될 수가 없기 때문에 그냥 때려넣고 시작해도 상관이 없다.
li 에는 x + 1번째 요소들을 차례로 넣고 se은 그 li를 set로 변환한 형태다. set는 중복된 요소를 지워버리기 때문에 만약 둘의 길이가 달라지면 그 놈은 중복된 단어를 말한 거라서 탈락이다.
len(li) != len(se)
그리고 x 번째 글자의 끝 글자와 x + 1 번째 글자의 첫 글자가 다른지 확인하는 방법은 이거다.
words[x].strip()[-1] != words[x + 1].strip()[0]
a.strip()[-1] 을 하면 a라는 문자열의 마지막 글자를 알 수 있다.
끝말을 잇지 않았을 경우와 중복된 단어를 말한 경우 모두 탈락조건이기 때문에 or( | )을 사용하여 조건을 걸어준다.
if (words[x].strip()[-1] != words[x + 1].strip()[0]) | (len(li) != len(se)):
만약 세 번째 사람이 자신의 세 번째 차례에서 틀렸다면 [3, 3] 이런 식으로 최종출력이 되어야 한다.
위 if 조건에 걸리는 x 는 사실 x + 1 이 잘못됐기 때문에 걸리는 거다. 근데 배열의 index 는 0부터 시작하기 때문에 거기다가 또 +1 을 해줘야 한다. 그래서 최종적으로는 x + 2 번째 단어가 문제가 되는 것이다.
return 되어야 하는 배열 중 0 번째 요소는 참여한 n명의 사람 중 누가 탈락자인지 판별하는 요소이다. 그래서 잘못된 단어의 순서 / 인원 수의 나머지 즉, (x + 2) % n가 된다. 근데 이게 0이 되면 맨 마지막 사람이라는 뜻이다. 그래서 num1(탈락자)이 0이면 num1 = n 이라고 했다.
return 되어야 하는 배열 중 1 번째 요소는 탈락자가 몇 번째로 말한 단어인지 판별하는 요소이다. num1이 0이면 위에서 n으로 바꿔주었다. 그래서 num1 = n 이면 int((x + 2) / n) 번째다. 근데 num1 이 0이 아니면 int((x + 2) / n) + 1을 해야한다. 페이징이랑 똑같다.
x + 2(탈락 단어의 순서)가 7, 8, 9일 때를 예로 들고, 참가자가 3명이라고 한다면
1번 참가자 : 1, 4, 7, ...
2번 참가자 : 2, 5, 8, ...
3번 참가자 : 3, 6, 9, ...
탈락 단어의 순서가 7일 때 : 1번 참가자의 3 번째 단어 -> [1, 3] ( int(7 / 3) = 2, 2 + 1 = 3 번째 단어 )
탈락 단어의 순서가 8일 때 : 2번 참가자의 3 번째 단어 -> [2, 3] ( int(8 / 3) = 2, 2 + 1 = 3 번째 단어 )
탈락 단어의 순서가 9일 때 : 3번 참가자의 3 번째 단어 -> [3, 3] ( int(9 / 3) = 3 번째 단어 )
만약 반복문 안에서 위 조건들에 걸리지 않았다면 탈락자가 없다는 얘기이다.
- 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.
문제에서 이렇게 주어졌기 때문에 [0, 0]을 return 하면 된다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - Python] Lv.2 오픈채팅방 (0) | 2023.03.12 |
---|---|
[프로그래머스 - Python] Lv.2 프렌즈 4블록 (0) | 2023.03.09 |
[프로그래머스 - Python] Lv.2 뉴스 클러스터링 (0) | 2023.03.08 |
[프로그래머스 - JavaScript] Lv.2 튜플 (0) | 2023.02.11 |
[프로그래머스 - JavaScript] Lv.2 숫자의 표현 (0) | 2023.02.09 |