본문 바로가기

코딩테스트/Python

(225)
[프로그래머스] 땅따먹기 내 코드 def solution(land): p = [[l for l in ld] for ld in land] for i in range(1,len(land)): for j in range(4): p[i][j] = max([p[i-1][k] for k in range(4) if k!=j]) + land[i][j] return max(p[-1]) 이때까지 밟은 땅의 최대값을 구해서 풀었다. 지금 밟고있는 땅의 행의 -1된 땅들중에서 지금 밟고있는 땅의 열과 다른 땅들의 max를 구해 지금 밟고있는 땅의 수와 합친다. 다른사람 코드 def solution(land): for i in range(1, len(land)): for j in range(len(land[0])): land[i][j] = max(la..
[프로그래머스] 점프와 순간이동 아!!짜증나!!! 효율성 테스트에서 자꾸 시간 초과나서 인터넷봄.. 답지보는건 자존심 상하는데.. 휴 실패한 내 코드 def solution(n): p = {0:0} for i in range(1,n+1): if i%2==0: p[i] = min(p[i//2],p[i-1]+1) else: p[i] = p[i-1]+1 return p[n] 이렇게 최솟값을 다 구해줘서 구했다. 하나하나씩 다 구해줘서 느린건 알겠는데.. 재귀로 해도 더느려지고 그래서 포기했었음 ㅠ 다른사람코드 def solution(n): answer=0 while n!=0: if n%2==0: n//=2 else: n-=1 answer+=1 return answer ㅠ 이거 보니까 진짜 짜증났다.. 왜 난 더어렵게 풀어서.. 휴... 알고..
[프로그래머스] [3차] 방금그곡 내 코드 def solution(m, musicinfos): l = [] for i,info in enumerate(musicinfos): mu="" arr = info.split(",") time1 = list(map(int,arr[0].split(":"))) time2 = list(map(int,arr[1].split(":"))) time = (time2[0]-time1[0])*60 + (time2[1]-time1[1]) tmp = arr[3]*1439 j=timer=0 while True: if timer == time: break mu+=tmp[j] timer+=1 if tmp[j+1]=="#": mu+=tmp[j+1] j+=1 j+=1 while True: if m in mu: if mu.ind..
[프로그래머스] [3차] 압축 내 코드 def solution(msg): answer = [] dic={} s = "" for j,c in enumerate([chr(ord('A')+i) for i in range(26)]): dic[c] = j+1 i=27 for m in msg: s+=m if s not in dic: answer.append(dic[s[:-1]]) dic[s] = i i+=1 s=s[-1] answer.append(dic[s]) return answer 영단어 딕셔너리를 만들어준다음 msg를 돌아가면서 딕셔너리에 있는지 확인한다. 딕셔너리에 없으면 answer에 마지막 문자를 뺀 문자를 딕셔너리에 넣어 append한다. 딕셔너리에 26이후숫자를 붙여주기 위해서 27부터 i를 설정한다. s는 마지막 단어만 저장시킨..
[프로그래머스] 튜플 - 작성중 내 코드 def solution(s): answer = {} s = s.replace("{","").replace("}","") s = s.split(",") s = list(map(int,s)) for i in s: if i in answer: answer[i]+=1 else: answer[i]=1 answer = answer.items() return [i[0] for i in sorted(answer,key = lambda x:-x[1])] s에서 {}를 없애준다음 ,를 따라서 분리해줬다. 문자를 숫자로 바꾸고 딕셔너리를 만들어줬다. 딕셔너리를 value값으로 내림차순해주고 그에따른 key를 구함! ㅠㅠ 딕셔너리 내림차순 까먹어서 인터넷 찾아봄 ㅠㅠ d.items()를 하면 튜플형태로 만들고 sor..
[프로그래머스] 영어 끝말잇기 내 코드 def solution(n, words): s = [] for i,wd in enumerate(words): if i==0: s.append(wd) continue elif wd not in s and s[-1][len(s[-1])-1] == wd[0]: s.append(wd) else: return [i%n+1,i//n+1] return [0,0] 탈락하지 않은 단어는 s에 차례대로 넣는 방식으로 풀었다. 현재 단어가 s에 포함되어있지않고 s의 가장 마지막 단어의 끝자리와 s의 첫자리가 같으면 통과이므로 s에 넣는다. 만약 아니면 탈락이므로 답을 return 한다. 끝까지 돌아도 탈락자가 생기지 않으면 [0,0]을 return 한다. 다른사람 코드 def solution(n, words): f..
[프로그래머스] 오픈채팅방 내 코드 def solution(record): answer = [] people = {} position = {"Enter":"들어왔습니다.","Leave":"나갔습니다."} for re in record: arr = re.split() if arr[0] != "Leave": people[arr[1]] = arr[2] for re in record: arr = re.split() if arr[0] in position: answer.append(people[arr[1]]+"님이 "+position[arr[0]]) return answer 딕셔너리를 사용해서 풀었다!! leave가 아니라면 people에 이름을 계속 갱신시켜준다. 이름을 다 바꿨으면 answer리스트를 만들어서 답을 리턴한다. 다른사람 ..
[프로그래머스] 문자열 압축 내 코드 def solution(s): answer = len(s) for i in range(1,(len(s)//2)+1): list_s = s a = [] k=0 for j in range((len(s)//i)+1): a.append(list_s[:i]) list_s = list_s[i:] stack = [] stack.append(a.pop(0)) while len(a)>0: p = a.pop(0) if stack[-1] == p: k+=1 else: if k>=1 : stack[-1] = str(k+1) + stack[-1] stack.append(p) k=0 if k>=1 : stack[-1] = str(k+1) + stack[-1] answer = min(answer,len("".join(st..