백트래킹 문제이다. 처음에는 전체 경우의 수에서 여집합을 빼면 되지 않을까 생각했는데 고민해보니 여집합의 경우의 수를 구하는 게 꽤 까다로웠다. (겹치는 부분이 많아서!) dp나 브루트포스로 풀려고 해도 풀이가 잘 떠오르질 않아서 다른 분들 풀이의 도움을 받았다.위와
백트래킹 문제이다. 어제 풀었던 넴모넴모와 비슷한 유형이라 비슷한 방식으로 풀이했다.각 포지션에서 각 선수를 선택하지 않는 경우와, 각 선수가 능력치가 0이 아니고, 이미 선택되지 않았을 경우 선택하는 경우 두개로 나누어서 dfs를 수행하도록 했다. 처음에 ans=0을
이번에는 dp 문제이다. dp문제는 풀어도 풀어도 어려워서.. 어렵지 않은 것 같은데 계속 틀려서 한참동안 삽질을 하다가 다른 분들의 풀이를 보고 해결할 수 있었다.코드이다. 해당 dpi = min(dpi-num+fee, dpi)는 i=num일때부터를 시작해서, dpi
수학 문제라서 별달리 풀이할 건 없다... 다만 나는 코드를 좀 지저분하게 짜서 다른 분들의 풀이도 참고해보려고 정리차 글을 남긴다.else파트에서 플래그 변수를 쓰기가 귀찮아서 exit()를 썼는데, 아예 else를 걸어주는 방법도 있다는 걸 알게됐다! 그리고 나는
한참을 헤매다가 결국 못 풀어서 다른 분들의 답을 보고 풀 수 있었다.이분탐색문제는 항상 코드를 짜는 것 자체보다는 뭘 기준으로 탐색을 하고, 최솟값과 최대값의 초기값을 뭘로 할지를 찾는게 어렵다. 그리고 이게 이분탐색문제라는 말을 안 들었으면 이분탐색 문제라는 걸 알
원래는 이분탐색을 풀려고 시작했던 문제인데, 그냥 방정식으로도 풀 수 있을 것 같아서 방정식으로 풀었다.math.sqrt(check).is_integer()으로 해서 계속 틀렸는데, math.pow(math.sqrt(check),2)==check로 해도 안되고, int
이분탐색문제인건 알았는데 풀이를 생각을 못해서 한참을 헤매다가 결국 다른 분들의 풀이를 확인했다. 최적의 위치를 찾는 걸로 생각하고 풀었는데 간격을 기준으로해서 풀이하면 되는 거였다.나는 left, right를 0,L으로 두고 좌표값으로만 생각해서 mid도 새로 추가할
이분탐색 또는 dp로 풀 수 있는 문제다. 나는 이분탐색 연습중이라 이분탐색으로 풀었다!visit 설정해주지않으면 시간초과 나고, boolean 변환 형식은 틀리고 flag를 사용해서 경로여부탐색을 해야되는 것 같다. (모든 경우의 수를 다 탐색해야해서 그런듯?) 숫자
이 문제는 금방 풀어서 코멘트할 게 딱히 없다. 범위 안의 점을 구하는 것이므로 lowwer/upperbound를 각각 구할때 반환값을 조정해줘야하는 것만 주의하면 될 것 같다. 그나저나 파이썬으로만 풀다가 자바로 풀어보니 입력값받는게 확실히 불편하긴 한 것 같다..
매개변수 탐색 문제가 풀기가 어려운 것 같다. 좀 더 문제를 많이 풀어봐야할듯...
bfs+이분탐색 문제다. 메모리 초과가 계속 나서 까다로웠다.....다익스트라로 푸는 방식도 있다고 한다. 다익스트라가 더 문제 출제 의도에 맞는 것 같기도? 파이썬 쓰다가 자바로 넘어오니까 자료형 쓰는 방법이나 메모리 초과 이런게 어렵다..
정석 이분탐색 문제(?) 라고 할 수 있겠다. 시간 초과가 나서 혹시나해서 출력을 System.out.println()말고 bufferedwriter을 썼더니 시간은 괜찮아졌다. 그런데, 분명 코드에는 틀린 게 없는 것 같았는데 계속 틀렸다고 나왔다. 알고 보니 buf
전형적인 이분탐색 문제다! 따로 풀이할 게 없음.
투 포인트 알고리즘을 이용해서 풀 수 있다.그냥 start++; end=start; Arrays.fill(visit,0); 해주면 시간초과 난다.start++해준 후에 visit값들을 초기화시켜줘야 정상적으로 동작하고 시간초과가 안 난다.
투 포인터 알고리즘을 활용해서 풀 수 있는 문제다. 투 포인터 알고리즘으로 문제를 풀 때는 구간을 새롭게 정의해야할때 1)지금까지 찾아온 구간을 충분히 활용하여 시간 절약할 것, 2)값을 제대로 초기화할 것 등을 신경쓰면 비교적 쉽게 풀 수 있는 것 같다.
이제 막 세그먼트 트리 공부를 시작하면서 풀게 된 문제라서, 풀이는 다른 분들의 코드를 참고했다.이진 트리를 생성해서 각 트리별로 구간합을 저장하고, 그 트리를 이용해서 구간합을 구하는 문제다. 개념 자체는 어렵지 않은 것 같다. 다만 익숙해지기 전까지는 어떤 노드에
모 기업 코테에서 나왔던 문제와 유사한 문제라고 해서 풀어봤다. 나는 해당 코테에서는 손을 못 댄 문제였어서 풀어봄. 전공 과목에서 비슷한 방식으로 탐색해서 값을 구하는 걸 배웠던 기억은 어렴풋이 나는데 잘 기억이 안나서 dp 점화식 세우기가 어려웠다. 1~10까지의
어제 풀었던 문제와 비슷한 유형이어서 금방 풀었는데, 4중 for문이 들어가니 python3으로는 시간초과가났고 pypy3으로 해야 통과됐다.
골드 문제치고는 조금 쉬웠던 느낌?! 처음에는 마지막 리프노드 체크 로직에서 len(nodesidx)==0으로 했는데 70%대에서 틀렸다. 그래서 반례 찾아보고 고민해보니 자식 노드가 하나인데 그 자식 노드가 삭제하는 노드인 경우처럼 nodesidx는 0이 아니지만 노
투포인터로 바로 풀 수 있는 문제다. 다만 종료 조건을 어떻게 해야할지를 고민했는데, G=cur^2-past^2=(cur-past)\*(cur+past)이며, cur,past는 모두 자연수이고 cur>past가 자명하므로 (G>=1이기 때문에) G=n\*m(m>n)이라
블로그를 옮기려고 하고 있긴한데, 아직 정리가 안 돼서 일단 지금은 여기로 올린다.일단 데이터 범위를 확인했을 때 브루트포스는 아닌 건 확실했고, 그래서 처음에는 이분탐색으로 접근했다.(l_min, r_max를 구해서 r_max-l_min<d 일때까지 값을 찾는
처음에 dfs로 접근했다가 시간초과 메모리초과 장렬하게 맞고 다른 분들의 풀이를 찾아보니 대부분 bfs로 푸셨길래 bfs로 바꿔서 풀었더니 맞았다. 각 방향에 대해서 모든 경우의 수를 따져야하고 이런저런 조건이 많으니 막연히 dfs로 생각했는데, 구해야하는 값이 최소값
knapsack으로 풀었더니 계속 시간초과가 나서, 질문 게시판을 참고해보니 유니온파인드를 써야한다는 힌트를 찾을 수 있었다. 그리고 한참을 했는데 아무리 해도 안됐다.. 계속 1%에서 틀렸다. 결국 다른 분들의 답을 찾았는데 로직은 똑같았다. 도대체 뭐가 문제인지 몇
이 문제도 구현 자체는 어렵지 않았는데... 엣지케이스때문에 좀 골치가 아팠다. 질문 게시판에 올라와있는 반례인데, 처음에는 heapq로 단순 bfs 활용해서 풀었더니 저 케이스가 틀리게 나왔다.이게 처음 작성한 풀이이다.기본 bfs의 경우에는 경로상 장애물이 있거나
그냥 직선의 방정식 구한 후에 교점이 범위 내에 있는지 찾아주는 방식 + y축에 수직한 선분인 예외상황을 고려해주면 풀 수 있는 문제다. 단, x1<=x2, x3<=x4라는 보장이 없으므로 이 부분은 입력 받은 후에 수정해줘야한다. (처음에 이걸 고려 안해서
일단 1<=L<=500,000이고 0<=K<=100,000이므로 최대 O(N)의 알고리즘이어야겠다라는 생각을 했다. 그러니 단순히 queue로 넣고 빼고 하는 건 안 될 거라고 생각했고.. 처음에 짰던 알고리즘은 다음과 같다.하지만 시간초과가 났다
문제 자체는 간단한 BFS 문제인데, N과 M의 범위가 크다. (0<N<=10,000, 0<M<=100,000) 그래도 시간 제한이 5초니까 널널하게 풀릴거라고 생각하고 그냥 BFS로 구현을 했는데... 시간 초과가 나왔다.처음에는 결과를 배열에