250x250
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
- 가설검정
- Leetcode
- Set
- Til
- 데이터시각화
- 리스트
- AB테스트
- Join
- 태블로
- 선형회귀
- 이중for문
- 내배캠_학습기록
- 아티클스터디
- 다중공선성
- 반복문
- 프로그래머스
- python
- 시각화
- f-string
- map
- 통계학
- DATE_SUB
- Max
- ★
- SQLD
- SQL
- 한줄for문
- 내일배움일지
- 내일배움캠프
- 데이터전처리
Archives
- Today
- Total
노력에는 지름길이 없으니까요
프로그래머스 - 영어 끝말잇기 Python ver. 본문
728x90
아이패드의 티스토리 앱에서는 서식을 못 쓰네…
우선 기록이라도 해두겠다
20240721
Python
level 2
영어 끝말잇기
앞에 나온 단어를 썼거나, 끝말잇기에 실패한 라운드와 실패한 사람 번호를 반환
def solution(n, words):
test = [words[0]]
for i in range(len(words)-1) :
if words[i+1] in test or not words[i+1].startswith(words[i][-1]):
return [(i+1)%n+1, (i+1)//n+1]
test.append(words[i+1])
return [0,0]
코드설명 :
처음에는 words 자체를 2차원 배열로 바꾸는 작업이 필요할까 싶었지만, 원하는 데이터의 배열 자리만 찾으면 된다는 걸 깨달았다.
(내가 복잡도에서 항상 골머리를 썩히는 이유… 모든 데이터에 대한 처리를 하려고 한다는 점)
그래서 필요한 지점에서 바로 2차원 배열 값을 만들어 리턴하는 방법을 사용했다.
문제에서 제안되어 있는 break 조건은 두 개.
1. 앞에 나왔던 단어가 또 있을 때 -> words[i+1] in test
2. 끝말잇기에 실패했을 때 -> not words[i+1].startswith(words[i][-1])
두 가지를 or 조건으로 묶는다.
내가 test 배열을 굳이 사용한 이유가 게을러서임을 알기 때문에 ㅠㅠ (아래의 words[:p]를 써보려다 귀찮아서 그냥 리스트에 넣어버렸다)
다음에 제출하기 전에는 정답에 연연하지 말고 조금 더 머리를 써서 더 간단하고 아름다운 코드를 써봐야겠다….
베스트 코드
def solution(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]
728x90
반응형
'Python > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 직사각형 넓이 구하기 (Python ver.) (0) | 2024.08.01 |
---|---|
프로그래머스 - 배열의 원소만큼 추가하기 (Python ver.) (0) | 2024.07.30 |
프로그래머스 - N개의 최소공배수 Python ver. (0) | 2024.07.19 |
프로그래머스 - A로 B 만들기 Python ver. (0) | 2024.07.19 |
프로그래머스 - 길이에 따른 연산 Python ver. (0) | 2024.07.18 |