본문 바로가기

코딩테스트/Python

(225)
[프로그래머스] 캐시 내 코드 def solution(cacheSize, cities): answer = 0 q = [] cities = [i.lower() for i in cities] if cacheSize==0: return len(cities)*5 for city in cities: if city in q: answer+=1 q.remove(city) q.append(city) else: answer+=5 if len(q) == cacheSize: q.pop(0) q.append(city) return answer LRU 알고리즘은 페이지 교체 알고리즘 중에 하나로 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법이다. 운영체제 시간에 배웠었는데.. 오랜만에 본다. 이런식으로 문제도 적용될 수 있는걸 처음알았다 ㅎ ..
[프로그래머스] 입실 퇴실 내 코드 def solution(enter, leave): answer = [0]*len(enter) s = [] cnt1=cnt2=0 while True: if cnt2>=len(leave)-1: break if cnt1=len(leave)-1: break if leave[cnt2] in s: s.remove(leave[cnt2]) cnt2+=1 else: break cnt1+=1 return answer 으 ㅠ 문제 이해가 어려움!! 그래도 풀었다. s 라는 스택에 사람들의 입퇴실여부를 담았다. 만약 입실하였으면 s에 삽입하고 퇴실하였으면 s에서 제거한다. cnt1과 cnt2는 문제에서 주어진 enter, leave를 제어하는 변수이다. pop을 해서 풀면 필요없지만 실행시간을 줄이기위해 변수로 접근..
[프로그래머스] 이진 변환 반복하기 내 코드 def solution(s): answer = [0,0] while s!='1': tmp = s.count('1') answer[1]+= len(s) - tmp s = bin(tmp)[2:] answer[0]+=1 return answer ㅎㅎ 쉽다! 1의 개수를 구해 2진수로 변환한다. s가 1이될때까지 반복한다. 다른사람 코드도 나랑 같음!
[프로그래머스] [3차] 파일명 정렬 - (다시 풀어보기) 내 코드 def solution(files): tmp = [] for idx1,i in enumerate(files): head = num = tail= '' for idx2,j in enumerate(i): if j>='0' and j=5: break num+=j elif len(num)==0: head+=j else: break tail+=i[idx2:] tmp.append([head.lower(),int(num),tail,idx1]) return [files[tp[3]] for tp in sorted(tmp,key=lambda x:(x[0],x[1],x[3]))] 오랜만에 코테풀어봄 !! 오랜만에 하니까 너무 재밌다.. 휴... 문제에서 주어진대로 head,num,tail을 구하고 정렬을 해주었다...
[프로그래머스] 없는 숫자 더하기 내 코드 def solution(numbers): return 45 - sum(numbers) 머리 풀겸.. 프로그래머스 틀었더만.. 1단계가 새로 생겨서 한번 풀어봤는데... 너무 쉽다!!!! 다른사람 코드도 똑같음!
[프로그래머스] 예상 대진표 내 코드 def solution(n,a,b): answer = 1 dic = {a:a,b:b} while True: if dic[a]==dic[b]: return answer-1 if dic[a]%2==1: dic[a]+=1 if dic[b]%2==1: dic[b]+=1 dic[a] = dic[a]//2 dic[b] = dic[b]//2 answer+=1 참가번호 숫자를 딕셔너리에 넣어서 계산하였다. 다른사람 풀이 def solution(n,a,b): answer = 0 while a != b: answer += 1 a, b = (a+1)//2, (b+1)//2 return answer if문을 체크하지않고 무조건 +1을 하여 계산한것이다.
[프로그래머스] 방문 길이 내 코드 def solution(dirs): cur=(0,0) l = set() for d in dirs: if d == "U": walk = (cur[0],cur[1]+1) elif d == "D": walk = (cur[0],cur[1]-1) elif d == "R": walk = (cur[0]+1,cur[1]) else: walk = (cur[0]-1,cur[1]) if walk[0] =-5 and walk[1] =-5: l.add((cur,walk)) l.add((walk,cur)) cur = walk return len(l)//2 현재 좌표, 움직인 다음의 좌표를 구해 집합에 넣는다. 좌표 2개가 있을때 움직이는 방향은 cur -> walk, cur->walk 두 종류가 존재하므로 집합에 두 경..
[프로그래머스] 피보나치 수 내 코드 def solution(n): p = [0 for i in range(n+1)] p[0] = 0 p[1] = 1 for i in range(2,n+1): p[i] = p[i-2] + p[i-1] return p[n]%1234567 p는 피보나치 수를 담은 리스트다. n번째까지 p의 앞원소와 두번째 앞원소의 합을 더해 넣어준다. 재귀는 시간초과떴다 다른사람 코드 def solution(n): f_list = [0,1] for i in range(2,n+1): f_list.append((f_list[i-2]%1234567+f_list[i-1]%1234567)%1234567) return f_list[-1] 이렇게 append를 사용해서도 할 수있다!