코테 준비
-
[백준] LCS(최장 공통 부분 수열)코테 준비/문자열, 내장함수 2024. 7. 15. 22:21
핵심 알고리즘(dp)이중 for 문으로 모든 문자열을 비교하면서 first[i]==second[j] 이면 dp[i-1][j-1]+1→ 두 문자열에서 같은 문자가 추가 됐으므로 (이전 최장 공통 부분 수열)+1 first[i]!=second[j] 이면 max(dp[i-1][j],dp[i][j-1])→ 이전의 최대 공통 부분 수열 유지 first=input()second=input()dp=[[0]*(len(second)+1) for _ in range(len(first)+1)]for i in range(1,len(first)+1): for j in range(1,len(second)+1): if first[i-1]==second[j-1]: dp[i][j]=dp[i-1][..
-
[프로그래머스] 물고기 종류별 대어 찾기코테 준비/SQL 2024. 6. 13. 10:32
SELECT A.ID, B.FISH_NAME, C.LENGTHFROM FISH_INFO A JOIN FISH_NAME_INFO B ON A.FISH_TYPE=B.FISH_TYPEJOIN (SELECT FISH_TYPE, MAX(LENGTH) AS LENGTH FROM FISH_INFO GROUP BY FISH_TYPE) CON A.LENGTH=C.LENGTH AND B.FISH_TYPE=C.FISH_TYPEORDER BY A.ID ASC Group By에서 계속 오류가 나서 찾아봤더니, MAX/MIN/SUM 등의 함수를 사용할 때 group by 에 사용된 컬럼만 select 절에 사용 가능하다는 것이다. 이 사실을 몰라서 조금 헤맸다...
-
2018 KAKAO BLIND RECRUITMENT [3차] 파일명 정렬 feat. 정규표현식코테 준비/문자열, 내장함수 2024. 4. 19. 11:02
정규표현식을 잘 알고 있으면 쉽게 풀 수 있는 문제! 문자열을 숫자 기준으로 나누고 1. HEAD 기준으로 사전순 정렬 2. NUMBER 기준으로 오름차순 정렬 해주면 된다! import re def solution(files): def splitfile(file): match = re.match(r"([^\d]+)(\d+)(.*)", file) return match.group(1), int(match.group(2)) answer=sorted(files,key=lambda file: (splitfile(file)[0].lower(),splitfile(file)[1])) return answer
-
[백준] 8979. 올림픽코테 준비/구현 2024. 2. 8. 17:45
순위 매기는 것 때문에 헷갈렸다 조금... n,k=map(int,input().split()) medal=[] for i in range(n): n,gold,silver,bronze=list(map(int,input().split())) medal.append([n,gold,silver,bronze]) medal.sort(key=lambda x:(-x[1],-x[2],-x[3])) //금.은.동 순서로 정렬 cnt=1 medal[0].append(1) for i in range(1,len(medal)): cnt+=1 if medal[i-1][1:4]==medal[i][1:4]: medal[i].append(medal[i-1][-1]) # 메달 수가 같으면 순위 유지 else: medal[i].append..
-
[백준] 10431. 줄세우기코테 준비/구현 2024. 2. 8. 13:58
난이도 쉬운편. 단순 구현 p=int(input()) answer=[] for i in range(p): cnt = 0 heights = [] h=list(map(int,input().split())) heights.append(h[1]) for j in range(2,21): if h[j]h[j]: heights.insert(idx,h[j]) cnt+=len(heights)-idx-1 break else: heights.append(h[j]) answer.append((h[0],cnt)) for a,b in answer: print(a,b)
-
[백준] 9655. 돌게임코테 준비/DP 2024. 2. 7. 17:55
DP로 푼다고 하는데 그냥 단순 구현으로 푼 것 같다... n=int(input()) # 5 = 1/1/1/1/1 # 5 = 3/1/1/ cnt=0 while n!=0: if n>=3: n-=3 else: n-=1 cnt+=1 if cnt%2==0: print("CY") else: print("SK") 3개 이상 남아있으면 3개를 가져가고 그렇지 않으면 1개를 가져가는 방식으로 구현하였다. 어짜피 어떻게 가져가던간에 마지막에 가져가는 사람은 똑같기 때문..!
-
[프로그래머스] 등굣길코테 준비/DP 2024. 2. 6. 11:11
처음에는 조합? 확률과 통계 공식으로 풀어보려했는데 생각해보니 그렇게 복잡하게 풀 필요가 없었다. 테두리를 1로 초기화하고 puddle이 있는 좌표는 0으로 하여 dp[i][j]=dp[i-1][j]+dp[i][j-1] 을 사용해 풀면 되는 것이었다! def solution(m, n, puddles): dp=[[1]*n for _ in range(m)] for p in puddles: dp[p[0]-1][p[1]-1]=0 for i in range(1,m): for j in range(1,n): if dp[i][j]!=0: dp[i][j]=(dp[i-1][j]+dp[i][j-1])%1000000007 return dp[m-1][n-1] 처음에는 puddle 위치를 0으로 만들고 dp 적용하면 되겠다 싶었는..
-
[프로그래머스] 오픈채팅방코테 준비/Hash map 2024. 2. 2. 10:59
처음에는 노가다로 풀었는데 25번 테스트케이스부터 시간 초과가 났다... def solution(record): answer = [] id=[] for i in record: i=i.split(' ') if i[0]=='Enter': id.append(['Enter',i[1],i[2]]) for j in range(len(id)): if id[j][1]==i[1] and len(id[j])==3: id[j][2]=i[2] elif i[0]=='Leave': for j in range(len(id)): if id[j][1]==i[1]: id.append(['Leave',i[1],id[j][2]]) break elif i[0]=='Change': for j in range(len(id)): if id[j][..