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
- pyLDAvis
- 프로그래머스
- rest api
- ShallowCopy
- dead lock
- elastic search
- ChromeDriverManager
- jvm.py
- gensim
- bulk post
- ELASTIC
- git bash
- Java
- Pythonic
- tweepy
- centos8
- 백준
- dataframe
- 파이썬
- KONLPY
- Python.h
- pip install mariadb
- Jpype
- MariaDB
- 토픽모델링
- 나무자르기
- bs4
- js
- pandas
- 완주하지못한선수
Archives
- Today
- Total
부리부리부리
[프로그래머스] 완주하지 못한 선수 본문
https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3
첫 번째 시도
def solution(participant, completions):
for i in reversed(range(len(participant))):
num_of_completions = completions.count(participant[i])
if num_of_completions != 0:
completions.remove(participant[i])
del participant[i]
return participant[0]
참가자 명단과 완주자 명단을 비교해가며 완주자 명단에 존재할 시 삭제해나가는 코드
Python에서는 remove 메소드가 최악의 경우 O(n) 이 되어버려서 그다지 효율적이지 못한 코드라고 한다.
def solution(participant, completions):
answer=[];
for i in reversed(range(len(participant))):
num_of_completions = completions.count(participant[i])
if num_of_completions!=participant.count(participant[i]):
answer.append(participant[i])
break;
return answer[0]
하나 하나 제거해나가는 방식을 버려야했다. 생각해보니 count로 끝내버리면 될거같았다. 결과는 ...
생각해보니 count도 시간복잡도 O(n)을 잡아먹는다..
def solution(participant, completions):
answer=[];
participant = sorted(participant)
completions = sorted(completions)
for idx in range(len(participant)):
if idx+1 == len(participant):break;
elif participant[0:idx] + participant[idx+1:len(participant)] == completions:
answer.append(participant[idx])
return answer[0]
slicing을 통해 해결해보려했지만 이번엔 sorted가 O(nlog(n))을 잡아먹는단다.. ㅋㅋ
def solution(participant, completions): # participant = ['leo','muslav','kiki']
answer=dict(); # completions = ['leo','kiki']
for participant in participant:
answer[participant] = answer.get(participant,0)+1
for completion in completions:
if answer[completion]>0:
answer[completion] -= 1
if answer[completion]==0:
del answer[completion]
return list(answer.keys())[0]
결국 질문하기 글들을 봤는데 Hashing으로 풀면 편하다해서 구현(거의 copy)한 코드..
팀장님이 자기는 시간복잡도 고려해야할때 먼저 쓰는게 Hash 함수라고 하셨는데 진짜 흘려들었다가 시간 많이 날렸네
Hash는 key-value를 mapping해주는 방식을 말하는거같다.. 공부하기!!
'코테 > 코테 문제풀이' 카테고리의 다른 글
[Java] 백준 14247 - 나무자르기 (0) | 2023.08.02 |
---|---|
[코테] 동적 프로그래밍 - 1로 만들기 (0) | 2023.05.01 |
[python/백준] 영수증 (0) | 2022.12.05 |
[python/백준] 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2022.12.01 |
[프로그래머스] 행렬의 덧셈 (feat. zip) (0) | 2022.01.19 |