Loading the catalog…
Loading the catalog…
- 올것이 왔다. 복학하고 얼마 지나지 않아 코딩경진대회 개최 공지가 떴다. 이번에도 안보면 진짜 다음 시험은 4학년때나 볼 수 있어서... 한번 보기로 했다. PCCP 응시료를 공짜로 내주기도 하고. - 원래는 5만원이나 하는데 학과에서 대신 내준다. 산업기능요원 복무하는동안 회사에서 틈틈히 백준으로 코테 공부를 하긴 했는데, 잠시 휴학했던 사이에 백준은 역사속으로 사라져버렸고... PCCP를 주관하는 프로그래머스는 조금 다른 채점 방식을 사용한다. - solution이라는 메소드만 작성하면 된다. solution() 메소드만 작성해주면, input값을 그대로 가져와준다. 백준에서는 그 input시간도 줄여보겠다고 sys.stdin.readline을 활용했는데.. 그짓을 또 할 필요는 없어졌다. 솔직히 훨씬 편하다. 문제 읽으면서 코드 작성도 한 화면에서 할 수 있게 됐고. 여하튼, 오늘은 대회 준비하면서 풀었던 문제들 분석과 함께 대회 복기를 해보려 한다. PCCP 기출문제 1번 - 붕대 감기 일단 제일 먼저 문법에 익숙해지기 위해 풀었던 붕대감기 문제. 간단한 구현 문제고, 1번 문제인 만큼 난이도는 쉬웠다. def solution(bandage, health, attacks): answer=health now=0 for i,j in attacks: healtime=i-now-1 if answer==health: pass else: answer=min(health,(healtime//bandage[0])*bandage[2]+bandage[1]*healtime+answer) answer-=j now=i if answer<=0: return -1 return answer 대충 attacks 에 for문 돌려서, 각 공격마다 체력(answer)이 0 이하로 내려가면 바로 -1을 return하게 두고, 그렇지 않을 경우 최종적으로 남은 체력을 표시하게 하는 코드다. 문제를 제대로 읽어본다면 금방 풀 수 있는 문제. PCCP 기출문제 2번 - 석유 시추 2번 문제부터 바로 탐색을 시킨다... 머리로 알고 있어도 구현하기 진짜 귀찮은데... 늘 하던대로 ix[0,1,0,-1] iy[1,0,-1,0] 구현해주고 for문으로 상하좌우 탐색하게 시켰다. import sys sys.setrecursionlimit(1000000) def solution(land): m=len(land[0]) n=len(land) amountmap=[0] index=0 visited=[[-1]*m for _ in range(n)] where=[set() for i in range(m)] def searcher(x,y,code): ix=[1,0,-1,0] iy=[0,1,0,-1] visited[x][y]=0 for a in range(4): dx=x+ix[a] dy=y+iy[a] if 0<=dx<n and 0<=dy<m: if visited[dx][dy]==0: pass elif land[dx][dy]==0: visited[dx][dy]=0 pass elif land[dx][dy]!=0: visited[dx][dy]=0 where[dy].add(code) amountmap[code]+=1 searcher(dx,dy,code) for i in range(n): for j in range(m): if visited[i][j]==0: pass elif land[i][j]==0: visited[i][j]=0 pass elif land[i][j]!=0: amountmap[index]+=1 where[j].add(index) searcher(i,j,index) index+=1 amountmap.append(0) answer = 0 for i in where: num=0 for j in i: num+=amountmap[j] answer=max(num,answer) return answer 일단 연습문제는 다 맞았는데, 지도가 커지고 나면 탐색을 하면서 python 기본으로 내장된 재귀 제한 횟수를 넘기게 된다. 이 경우 재귀 제한을 더 늘려주는걸 잊지 말자. import sys sys.setrecursionlimit(1000000) 어쨋든, 각 석유를 발견할 때마다 발견한 순서대로 그 크기를 array에 따로 기록해두고, 석유에 code라는 이름의 시리얼 넘버를 기록한 뒤, set에 각 x 좌표별로 몇번 석유를 시추할 수 있는지 기록했다. 탐색하면서 동시에 솔루션까지 찾을 수 있으니, 이후에 한번 더 x 좌표별로 for문 돌리는것보다 시간 효율적이다. 마지막엔 X좌표별 Set를 하나씩 꺼내서, max값 비교만 해주면 되니까. PCCP 기출문제 3번 - 아날로그 시계 이번 문제는 친구가 풀다가 도저히 못풀었다고 해서 풀어봤다. 구현의 난이도는 그렇게까지 높진 않은데, 문제는 엣지 케이스가 너무 많다;;; def solution(h1, m1, s1, h2, m2, s2): Oclock=h2-h1 answer=0 if h1==h2 and m1==m2: if (h1==0 and m1==0 and s1==0) or (h1==12 and m1==0 and s1==0): return 1 if float((h1%12)*5)+float(m1)/12>=float(s1) and float((h2%12)*5)+m2/12<float(s2): answer+=1 if float(m1)+float(s1)/60>=float(s1) and float(m2)+float(s2)/60<float(s2): answer+=1 return answer totalmin=(h2*60+m2)-(h1*60+m1) if (h1==0 and m1==0 and s1==0): Oclock+=1 totalmin-=1 elif (h1==12 and m1==0 and s1==0): Oclock+=1 totalmin-=1 if s1>0: totalmin-=1 if float((h1%12)*5)+float(m1)/12>=float(s1): answer+=1 if float(m1)+float(s1)/60>=float(s1): answer+=1 elif s2>0: if float((h2%12)*5)+m2/12<float(s2): answer+=1 if float(m2)+float(s2)/60<float(s2): answer+=1 answer+=max(totalmin,0)*2 answer-=max(Oclock,0) return answer 그러니까, 1시간동안 초침은 분침과 시침을 60번 만나고, 자정과 정오의 경우 59번 만난다. 그래서 문제에서 주어진 시간을 풀타임 N시간+(m분 k초)로 구현했는데.. 생각보다 엣지케이스가 많았다. 엣지케이스 다 걸러내는 작업 하고 나서도 몇문제 틀리길래, GPT한테 도와달라고 했다. 자존심 상하긴 했지만, 엣지케이스를 구분할 수 있는것도 실력이라고 생각한다...
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
ITM 코딩경진대회 - 준비부터 복기까지 -1. - 올것이 왔다. 복학하고 얼마 지나지 않아 코딩경진대회 개최 공지가 떴다. 이번에도 안보면 진짜 다음 시험은 4학년때나 볼 수 있어서... 한번 보기로 했다. PCCP 응시료를 공짜로 내주기도 하고. - 원래는 5만원이나 하는데 학과에서 대신 내준다. 산업기능요원 복무하는동안 회사에서 틈틈히 백준으로 코테 공부를 하긴 했는데, 잠시 휴학했던 사이에 백준은 역사속으로 사라져버렸고... PCCP를 주관하는 프로그래머스는 조금 다른 채점 방식을 사용한다. - solution이라는 메소드만 작성하면 된다. solution() 메소드만 작성해주면, input값을 그대로 가져와준다. 백준에서는 그 input시간도 줄여보겠다고 sys.stdin.readline을…
Open source