Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 3기가 마지막이라니..!
- splitlines
- ImageDateGenerator
- 컨브넷
- WITH CUBE
- 그로스 마케팅
- 리프 중심 트리 분할
- 부트 스트래핑
- pmdarima
- WITH ROLLUP
- Growth hacking
- 분석 패널
- 캐글 산탄데르 고객 만족 예측
- 데이터 증식
- 그룹 연산
- 데이터 정합성
- 인프런
- 캐글 신용카드 사기 검출
- 마케팅 보다는 취준 강연 같다(?)
- tableau
- 스태킹 앙상블
- python
- DENSE_RANK()
- XGBoost
- 데이터 핸들링
- lightgbm
- ARIMA
- 그로스 해킹
- sql
- 로그 변환
Archives
- Today
- Total
LITTLE BY LITTLE
[1] 프로그래머스 - 영어 끝말잇기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12981
#1 영어 끝말잇기¶
1~n명의 끝말잇기: 사람의 수n과 그들이 말한 words를 매개변수로, 먼저 탈락하는 사람의 번호와 자신이 몇 번째에서 탈락하는지 출력하는 함수
조건
- p번째 단어의 첫 문자열이 그 이전 단어의 마지막 문자열과 동일하지 않거나 (탈락)
- p번째 단어가 p번째 이전까지의 단어안에 존재한다면 (중복,탈락)
출력
- p번째를 사람 수 n으로 나눈 값의 나머지에, 리스트의 idx는 0부터 시작하는 반면, 0번째 사람은 없기 때문에 1을 더한 값을 출력하고 (위의 조건에 의해 탈락하는 사람 번호)
- p번째를 사람 수 n으로 나눈 값에 1을 더한 값을 출력(몇 번째 탈락인지)
In [22]:
def solution1(n, words):
answer = []
person, trial = 0,0
answer.append(person)
answer.append(trial)
used_word = []
used_word.append(words[0])
last_word = words[0][-1]
N = len(words)
for i in range(1,N):
start_word = words[i][0]
if words[i] not in used_word and start_word == last_word:
used_word.append(words[i])
last_word = words[i][-1]
else:
person = ((i%n) + 1)
trial = ((i//n) + 1)
answer[0] = person
answer[1] = trial
break
return answer
- 이미 나온 단어는 used word 단어 리스트에 추가
- 마지막 문자열을 last word로 추가하고, 이 last word와 start word가 동일한지 반복문으로 검사
- 동일하지 않거나, used word 리스트에 있으면 solution의 answer return
- /가 아닌 //를 쓰면 int로 변환할 필요가 없다
In [28]:
def solution2(n, words):
answer = []
turn = 0
wordList = [words[0]]
for idx in range(1, len(words)):
if words[idx-1][-1] != words[idx][0]:
turn = idx
break
if words[idx] in wordList:
turn = idx
break
wordList.append(words[idx])
answer = [turn%n +1, turn//n +1]
if turn == 0:
answer = [0,0]
return answer
- 별도의 last words 리스트를 만들지 않고, words[idx][0] 첫번째 문자열이 [idx-1][-1] 마지막 문자열과 일치하는지 확인
In [29]:
def solution3(n, words):
for p in range(1, len(words)):
if words[p][0] != words[p-1][-1] or words[p] in words[:p]: return [(p%n)+1, (p//n)+1]
else:
return[0,0]
- 별도의 used_word 리스트를 만들지 않고, 특정 부분을 slicing하여 간단히 해결
In [30]:
words = ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]
3명의 참가자, 3번째 사람이 3 round에서 자신이 말했던 단어 중 하나(tank)를 말해서 탈락 ->3,3
In [31]:
solution1(3,words)
Out[31]:
[3, 3]
In [32]:
solution2(3,words)
Out[32]:
[3, 3]
In [33]:
solution3(3,words)
Out[33]:
[3, 3]
'프로그래머스' 카테고리의 다른 글
[알고리즘] 정렬 - K번째 수 (3) | 2024.09.07 |
---|---|
[알고리즘] 해시 - 완주하지 못한 선수 (0) | 2024.09.02 |
[알고리즘] 해시 - 폰켓몬 (0) | 2024.09.01 |
[2] 프로그래머스 - SQL (0) | 2024.08.12 |
[1] 프로그래머스 - SQL (0) | 2024.08.08 |
Comments