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
- 그로스 마케팅
- Growth hacking
- python
- tableau
- WITH CUBE
- 그룹 연산
- sql
- DENSE_RANK()
- ImageDateGenerator
- 분석 패널
- lightgbm
- 데이터 핸들링
- 로그 변환
- XGBoost
- WITH ROLLUP
- 그로스 해킹
- splitlines
- 스태킹 앙상블
- 데이터 증식
- pmdarima
- ARIMA
- 3기가 마지막이라니..!
- 캐글 산탄데르 고객 만족 예측
- 인프런
- 부트 스트래핑
- 데이터 정합성
- 리프 중심 트리 분할
- 캐글 신용카드 사기 검출
- 컨브넷
- 마케팅 보다는 취준 강연 같다(?)
Archives
- Today
- Total
LITTLE BY LITTLE
[1] 프로그래머스 - 영어 끝말잇기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#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