문제 출처: https://www.acmicpc.net/problem/1261골드 4(solved.ac를 이용한 난이도 체크)사실 처음에 완전탐색으로 일일이 BFS 돌렸는데 시간초과 떴다. 그래서 벽 없는데로 최대한 갔다가 막힐때만 벽을 뚫으면 최소가 되지 않
문제 출처: https://www.acmicpc.net/problem/1005Gold 3 (solved.ac 이용)앞서 간선으로 연결된 노드가 건설이 끝나야 다음 건설 작업을 할 수 있다.즉, 자신으로 오는 화살표가 사라지면 본인 작업을 할 수 있다 -> 진입
문제 출처: https://jaimemin.tistory.com/585Silver 2 (solved.ac 이용)트리 모양으로 밑으로 퍼지는 구조이다.그렇기 때문에 부모노드를 알려면 마지막 자식노드까지 탐색해야한다.깊이 탐색할 수 있는 알고리즘은? DFS루트를
문제 출처: https://www.acmicpc.net/problem/1527Silver 1(solved.ac 이용)4와 7로 이루어진 숫자만 찾으면 된다.그럼 해당 숫자에 4와 7만 붙여서 범위가 넘지 않으면 4와 7로 이루어진 숫자가 된다.시도 1.처음엔
문제 출처: https://www.acmicpc.net/problem/2096Gold 4(solved.ac 이용)처음엔 마지막 줄까지 가면 되는 거니깐 깊이 탐색을 사용했다.시간초과가 나고 다른 사람 글을 참고하니 DP를 이용한다.열은 3개로 정해져 있고 행만
문제 출처: https://www.acmicpc.net/problem/2573Gold 4그래프 탐색 이용해서 하는 구현 문제라 어려운 것은 없다.단지, 신경쓸 게 덩어리를 어떻게 구분해서 counting 하는 것을 신경써서 풀었다.처음엔, queue를 2개 써
문제 출처 : https://www.acmicpc.net/problem/9252 문제 난이도 Lv 5 문제 접근법 > 최장 공통 부분 수열 알고리즘으로 알아두면 알고리즘이다. 이 문제를 처음 본 사람들은
문제 출처 : https://www.acmicpc.net/problem/2493Gold 5for문 돌리면 시간초과 나는 문제다.탑이 수신 받는 걸 잘 살피다 보면 stack을 써도 된다는 걸 찾을 수 있다.stack 맨 위에 넣은 높은 탑이 오른쪽 탑보다 크면
문제 출처: https://www.acmicpc.net/problem/1644Gold 3소수의 연속합이기 때문에 먼저 에라토스테네체의 해로 소수를 판별했다.그리고 연속합을 가리기 위해 삼중 for문을 써서 순서대로 더해줬는데 시간초과 났다.\-> 투 포인트 알
문제 출처:Gold 41번 정점부터 출발해서 중간에 2개의 정점에 무조건 들려야하기 때문에, 두 개의 경우의 수를 따져기만 하면 된다.1->N1->N2->N1->N2->N1->N(사실 두번째 경로는 나중에 알게 됨, 문제에서 무방향 그래프라는 조건을 놓쳤다)처음엔 크루
문제 출처:그리디 알고리즘이 생각났다. 가장 작은 가방에서부터 비싼 보석을 넣어준다.사실 처음에 가방에 보석, 그리고 최대값 구하는 거길래 냅색 알고리즘의 응용인줄 알았는데 가방에 넣을 수 있는 보석이 최대 한개라는 조건을 보고 최선의 해를 찾는 그리디를 하게 됐다.주
문제 출처 : https://www.acmicpc.net/problem/14888Sliver 1dfs를 이용한 백 트래킹처음에 틀렸는데 이유가 maxVal 초기값을 -1이라고 해서 그렇다. 문제에서 조건이 중간에서 값이 -10억이 나올 수 있다고 했기에 max
문제 출처: https://www.acmicpc.net/problem/10775Gold 1Gate와 Plane은 각각 다른 집합이고, Plane이 Gate에 도킹하면 영구적으로 도킹하기 때문에 추후에 다른 비행기가 도킹하려고 하면 안된다.그렇기 때문에, Uni
문제 출저:Gold 4문제를 이해부터 하는게 관건.즉, 시작점에서 끝점까지 물건을 이동하는데 다리 중량 제한을 넘지 않는 무게 중 최대값을 구하라는 것이다. (문제 중 한번의 이동이 힌트)시작점과 끝점까지를 탐색해서 무게가 넘지 않는지 check하고 그 중 가장 큰 값
문제 출처: https://www.acmicpc.net/problem/1107Gold 5완전탐색의 기본적인 문제가 아닐까 싶다.리모컨이 누를 수 있는 모든 버튼의 경우의 수를 찾아 가장 최소값을 출력해야한다.N의 범위가 500,000이지만 N을 만들기 위해 누
문제 출처:Sliver 3이분 탐색을 이용하는 문제.혹시 감이 잡히지 않는 사람들이라면 다른 사람 코드 보기 전에, 이분 탐색을 공부하고 다시 문제를 풀어보길 추천한다.
문제 출처: https://www.acmicpc.net/problem/1038Gold 5점점 감소하는 수니깐, 제일 큰수부터 작은 수로 깊이 들어가는 탐색법을 사용했다.9876543210까지 들어가니깐 int형으로는 틀렸습니다가 뜨니깐 long long 형으로
문제 출처: https://www.acmicpc.net/problem/1062Gold 4DFS를 사용했다.앞 뒤 네글자는 공통이라고 볼 때, K가 5보다 아래면 아무런 단어도 볼 수 없으므로 0.K가 26이면 모든 알파벳을 배우는 거기 때문에 모든 단어를 볼
문제 출처: Gold 5파이프 범위가 한정적이기 때문에 여러 경우의 수를 생각하지 않아도 됐다.깊이 탐색을 이용해서 파이프 끝이 (N,N)에 닿았으면 counting 했다.너무 하드코딩으로 풀었다 경우의 수가 적길래 하나하나 if 걸어줬더니 효율적이지 못한 코드가 됐다
문제 출처: https://www.acmicpc.net/problem/1633Silver 2(인데 체감 골드 5였다, 이유는 맨 밑에)1000줄까지 입력 받을 수 있다.흑백 누구든 선택해서 꾸릴 수 있고, 흑백 둘 중 아무도 선택하지 않을 수 있는 3가지 경우
문제 출처:Gold 3문제에 점화식이 다 나와있기 때문에 쉬운데 문제는 N이 10000000000000까지 있는데 이걸 충족할 DP를 선언하지 못했다.결국 찾아보니 Map으로 사용한 걸 봤고, DP를 굳이 배열로만 선언할 필요가 없다는 걸 새삼 깨달았다.주의모든 변수형
문제 출처:Gold 1왕국끼리 싸워서 남은 종주국을 출력하는 문제이므로 저절로 트리, 즉 부모 노드가 떠올랐다.그래서 집합의 한 종류이자 부모 노드를 알 수 있는 Union&Find 알고리즘을 사용했다.이에 관한 개념만 알고 기본 문제를 풀어봤다면 충분히 풀 수 있는
문제 출처: https://www.acmicpc.net/problem/1747Gold 5문제 나타낸대로 구현하면 된다. 하지만 주의할 점은 바로 범위 소수가 1000,000까지인데 이게 범위가 여기까지인게 아니라 N이 백만일때 나타날 소수범위까지를 고려해야한다
문제 출처: https://www.acmicpc.net/problem/2800Gold 5DFS를 이용해서 하나둘씩 문자열을 찾으면 된다.주의할 점은 괄호 하나씩을 체크하는게 아니라 괄호 쌍으로 체크해야한다.처음에 그냥 괄호 따로씩 하다가 틀렸다. 예제만 나와서
문제 출처 : Silver 1피보나치 수열의 거꾸로라고 생각하면 쉽다.D일 째 있는 수가 K 라면, D-1일 때 K보다 작은 수로 들어갈 수 있다.그럼 D-1일 때 수를 변하는 수 : a라고 생각해보면 D-2 일 때 수는 : 41-a가 된다.이런 원리를 사용해서 dfs
문제 출처 : https://www.acmicpc.net/problem/12865Gold 5냅색 알고리즘으로 유명한 문제.DP를 이용해서 풀 수도 있고, dfs 메모제이션을 이용해서 풀어도 된다.공통적으로,1) 짐을 넣는 경우2) 안 넣고 스킵하는 경우로 나뉘
문제 출처:https://www.acmicpc.net/problem/1655Gold 2시간 제한이 2초 이긴 해도, 입력 받자마자 계산하고 출력해야하기 때문에 이중 for문 및 정렬을 계속하면 시간 초과가 뜬다.우선순위 큐를 이용해서, 최소힙과 최대힙으로 중간
문제 출처:Gold 1문제를 계속 bool check배열을 초기화하고 처음부터 호수 전체를 돌면, 시간 초과가 난다.그래서 check 배열을 초기화시키지 않고 호수를 한 번만 탐색할 수 있도록 짜야한다.백조가 있는 곳도 물이다. 물이 있는 곳을 다 queue에 넣는다.
문제 출처: https://www.acmicpc.net/problem/11404Gold 4기본 알고리즘 중 플로이드-와샬 알고리즘(음의 사이클이 없는 그래프에 대해서 모든 정점 사이의 최단거리를 구하는 것이 가능)을 이용하는 문제다.다익스트라처럼 모든 정점에
문제 출처: https://www.acmicpc.net/problem/6087Gold 4거울을 방향에 따라 놓고, 레이저 방향을 튼다고 생각하지 말자.그냥 기존 방향과 다르게 꺾일 때 -> 거울을 놓았구나! 라고 생각하고 count + 1를 해주면 된다.이거
문제 출처: https://www.acmicpc.net/problem/5052Gold 4이 문제는 트라이 알고리즘을 이용하거나, 정렬 후에 Map(해시 함수)를 이용해서 풀면된다.나는 이 문제를 트라이로 풀었다. 트라이 알고리즘을 익히고 가장 기본으로 응용 될
문제 출처: https://www.acmicpc.net/problem/1141Silver 2접두사가 되는 애들만 체크해서 빼면 가장 큰 부분집합를 이루는 수가 된다.표시된 난이도보다 시간을 더 많이 쓰고 삽질을 많이 했다... 처음에 문제를 잘못이해해서 접두사
문제 출처: https://www.acmicpc.net/problem/1806Gold 3DP로 풀었다가 아무리 해도 답이 안나왔다. 더한만큼 빼주면 되는 투포인트 알고리즘을 사용하는 거였다. 부분합으로 max값을 구할 때 써도 되고 length 구할 때도 응용
문제 출처: Silver 3벽이 x번 방부터 y번 방까지 뚫린다면 그 방 전체가 한 방이 되는 거니깐 집합이 된다.그래서 Union&Find 알고리즘이 생갔났다. N은 100까지라서 그냥 알고리즘 짜도 통과할 것 같은데 큰 수일 때를 염두하고 짜봤다.괜히 더 어렵게 짠
문제 출처: https://www.acmicpc.net/problem/14500Gold 5N,M 숫자 범위가 작기 때문에 삼중 포문을 돌렸다.테트로미노 경우의 수도 작기 때문에 함수를 두어 여러번 호출했다.대신 ㅁ, ㅡ, ㄴ, ㄴㄱ 는 한붓그리기가 가능하다.
문제 출처: https://www.acmicpc.net/problem/3005Silver 1첨에 문제가 이해가 안가서 삽질 꽤나 했다.그래프 탐색 푸는 것처럼 풀면 된다.진짜 첨에 삽질 많이 했다.. 처음에는 0행과 0열만 비교해서 탐색했고 결국 silver
문제 출처: https://www.acmicpc.net/problem/9376Platinum 5bfs가 아닌 deque을 이용해야 한다.그리고 경우는 3가지로 나눈다.1) $ 죄수가 밖으로 나갈 때, 두 가지2) 밖에 있는 상근이가 문을 열고 들어오는 경우이렇
문제 출처: https://www.acmicpc.net/problem/11066Gold 31~N까지의 파일 최소값을 구하는 문제다.이중 배열 DP를 선언하고 결과적으로 DP\[1]\[N]인 값을 도출하면 된다.여기서 중요한 포인트는 누적합을 이용하는 것과 1~
문제 출처: https://www.acmicpc.net/problem/1956Gold 4사이클을 발견해서 최소 거리 비용을 구하는 문제.다익스트라나 프림은 사이클이 없을 경우에 이용가능하니깐 그냥 우선순위큐만 응용해서 구하려했으나 틀렸습니다 떴다.알고보니 플로
문제 출처: https://www.acmicpc.net/problem/5972Gold 5다익스트라 이용하는 대표 문제!if(dp\[idx]<cost) continue; 대신 bool check\[50001] 배열로 check해도 통과한다.첨에 if(dp\
문제 출처: https://www.acmicpc.net/problem/1068Silver 1 (solved.ac 이용)처음에는 queue를 이용해서 풀었다가 dfs를 이용했다.어쨌든, 자식 노드를 vector 배열에 넣고 dfs로 탐색하면 된다.
문제 출처: https://www.acmicpc.net/problem/11058Silver 11번 빼고 2~3번은 세트고 4번일 때 원래 있던 버퍼로 추가할 수 있다.1) 버튼 한 번 누르기 전 A 개수 + 12) 만약 충분히 세트로 이루고 남는다면, 4번 누
문제 출처: https://www.acmicpc.net/problem/2839Bronze 1dfs로 하면 시간초과가 난다. 그래서 그냥 직관적으로 풀었다.가장 최소값이니깐 5로 나뉘어지는 걸 먼저로 3씩 뺴준다.
문제 출처: https://www.acmicpc.net/problem/10655Silver 2N 범위가 십만이기 때문에 N^2으로 해결할 수 없다.그래서 일일이 계산하기 보단 체크 포인트 건너뛰고 전 후로 가는 거리가 작을 수록 좋다.\-> 체크 포인트 합쳐서
문제 출처 : https://www.acmicpc.net/problem/1976Gold 4플로이드-와샬 알고리즘을 사용했다.어찌됐건 동혁이 여행 코스가 되려면 중간에 거쳐서 그 코스가 되는 것도 OK이니깐.거쳐서 가는 것도 1로(다리가있다) 만들어줘야 겠다고
문제 출처: https://www.acmicpc.net/problem/7579 문제 난이도 Gold 3 문제 접근법 > 처음에 문제를 이해를 잘못해서 투포인트로 풀었다. 근데 DP로 풀어야하는 문제였다. 냅색 알고리즘으로 접근하는 거다. 할당할 수 있는 메모리를 두
문제 출처 : https://www.acmicpc.net/problem/9177Gold 5처음에 투포인트가 생각났다. 첫 번째 단어 idx랑 두번째단어 idx를 비교해서 세번째단어가 되는지 확인하면 되기 때문이다.그래서 비슷하지만 BFS를 이용해서 풀었다. 내
문제 출처: https://www.acmicpc.net/problem/11758Gold 5경우의 수를 다 따져서 구했는데, 공식이 있는 문제였다S < 0 : 시계방향S > 0 : 반시계방향S = 0 : 일직선
문제 출처: https://www.acmicpc.net/problem/2163Bronze 3초콜릿 자른 개수 -> 표 만들기 위해 필요한 선 개수라고 생각하면 쉽다!먼저 가로로 N-1개 자르고 세로로 M-1개 잘라야한다 근데 가로로 잘라진 N개를 다 세로로 M
문제 출처: https://www.acmicpc.net/problem/1789Silver 5서로 다른 N개의 수라고 해서 헷갈릴 수 있는데 그냥 1~N개 더해서 만들어지는 S합을 구하는 것이다 여기서 가장 큰 수면 당연히 N파이썬 3은 놀랍게도 놀랍게도!!!!
문제 출처: https://www.acmicpc.net/problem/2750Silver 5파이썬이 손에 익을 때까지 문제를 계속 풀어보는 수 밖에 없을 것 같다 C++이랑 비슷한데 완전 달라서 짧은 코드에도 어버버하면서 짠다
문제 출처: https://www.acmicpc.net/problem/1292Silver 4범위가 작으므로 이중 반복문과 배열을 이용한다. 2면 2만큼 2가 list에 들어가도록 해서 풀면 쉽다!
문제 출처: https://www.acmicpc.net/problem/2908Bronze 2입력 받은 수를 뒤집어서 수를 비교 한다.
문제 출처: https://www.acmicpc.net/problem/2460Bronze 3자체적으로 데이터에 1번과 10번일 때 0을 주니깐, 내린 사람 일 때 빼주고 탄 사람 일 때 더해서 제일 많은 승객 값을 구한다.
문제 출처: https://www.acmicpc.net/problem/2711Bronze 2문자열 위치를 주니깐 그걸 이용해서 문자열을 다루는 문제이 문제를 통해 파이썬 문자열을 다뤄봤다!
문제 출처: https://www.acmicpc.net/problem/2953Bronze 3반복문과 list를 이용하면 된다입력 받는 거 진짜 익숙해지지 않는다 .. 다른 사람 풀이 보니깐 map -> list 변환 후 바로 sum 함수 이용하던데 그렇게 하면
문제 출처:Gold 3 K번 연산이 끝난 후에 가장 큰 값을 출력하는 완전탐색 문제이다.여기서 문제는 한 번 연산을 할 때 마다를 기억하고 마지막 연산까지 가서 최대값을 출력하는 것이다.이를 위해 queue를 이용하고 queue.size(한 단계)만큼 반복문을 돌아 값
문제 출처:Silver 5sorted 함수를 써서푼다.위와 같이 풀었지만 암만 생각해도 파이썬?스럽지 못해서 다른 사람 코드 보는데 완전 다르다. 파이썬을 자꾸 C++처럼 풀게 되서 문제다
문제 출처: https://www.acmicpc.net/problem/16954Gold 5BFS로 푸는데 대신 벽의 조건을 잘 봐야한다. 처음에는 구현 문제인 줄 알고 접근했다가 안 풀려서 꽤나 시간이 걸렸다.시작은 맨 끝 줄에 있는 0행에서 시작하기 때문에
문제 출처: https://www.acmicpc.net/problem/2581Silver 4N 최대 수가 10,000이길래 에라토스테네스의 체를 사용했다.
문제 출처:Silver 1이거 그리디 아닌가? 하면서 쉽게 접근했다 ㅋㅋㅋㅋ 그냥 k값대로 나누고 몫을 더해주고 그만큼 k에 뺴면 된다. 대신 최소값이기 때문에 뒤에서부터 시작해야한다.이 문제 덕분에 파이썬 거꾸로 for 문 돌리는 법과 사칙연산자를 익혔다..C++에서
문제 출처: https://www.acmicpc.net/problem/9370Gold 2다익스트라를 이용해서 시작 정점에서 시작해 각 정점까지의 최단 거리를 구한다.그 후, 꼭 지나야하는 g,h 정점을 mid1,2 변수로 두고 더 최단거리가 작은 정점을 mid
문제 출처: https://www.acmicpc.net/problem/1967Gold 5처음엔, 루트 노드인 1부터 시작해 깊이 탐색으로 좌 우 판단 후 합한 길이가 제일 길 때를 구했다. -> 틀림그래서 두번째, 1부터 시작해 제일 긴 길이를 가진 노드를 구
문제 출처: https://www.acmicpc.net/problem/1701Gold 2(메모리 초과) 모든 부분 문자열을 일일이 map에 넣어준 후(중복 x을 위함), 문자열에 해당 부분 문자열이 얼마나 있는지 count 한 후에 제일 긴 문자열을 출력했다.
문제 출처:Gold 3일단, 먼저 건물을 지어야하는 것이 있다는 면에 있어 위상 정렬이 바로 떠올랐다.여기서 주의할 점은1) 만약 4가 지어야하는 건물이 2번과 3번 건물이 있는데 3번이 아무리 빨리 끝내도 2번이 3번보다 걸리는 시간이 크다면 4번은 2번까지 끝내고
문제 출처: https://www.acmicpc.net/problem/14466Gold 4set을 이용해 건초더미를 관리한다.그리고 cow 쌍을 일일이 맺어보며 dfs로 길 없이 갈 수 있는 위치를 찾는다.아래 코드가 틀린 이유1\. map을 사용한 것! ke
문제 출처: https://www.acmicpc.net/problem/11279Heap을 이해하고 직접 구현해보자.문제에서 필요한 Insert 함수와 Delete 함수를 구현해야하는데 주의할 점은Insert : UpHeap이 필요함, 추가된 노드 값으로 Par
문제 출처: https://www.acmicpc.net/problem/1197MST : 최소 신장 트리로 사이클이 없으며 모든 정점이 연결 된 상태에서 최소 가중치 합을 말한다.이 구현 방법에는 두가지가 있는데 Kruskal과 Prime 알고리즘이다.이 문제에
문제 출처: https://www.acmicpc.net/problem/11657Gold 4벨만-포드를 이용하는 기본적인 문제이다.문제 설명 중 시간 C가 양수가 아닌 경우가 있다. C = 0인 경우는 순간 이동을 하는 경우, C < 0인 경우는 타임머신으
문제 출처: https://www.acmicpc.net/problem/17199Silver 11번부터 N번까지 가는데 입력값으로 제시된 방향들이 단반향이라 한 역을 양방향화 시키면 끝까지 갈 수 있다. 근데 이 때 최소값인 수를 출력하는 문제다.처음에 문제가
문제 출처: https://www.acmicpc.net/problem/13335Silver 1 시도 1. 큐없이 그냥 idx를 두고 무게 +-를 쟀더니 다리를 건너는 시간 체크도 어렵고 답이 안나옴.시도 2. 큐를 가지고 접근. 사이즈가 차면 = 다리 건너는
문제 출처: https://www.acmicpc.net/problem/1189Silver 1처음엔 K길이의 가짓수래서 Bfs와 count 배열을 두고 접근했다. 그러나 bfs는 한 층? 한 정점이 사방으로 이어진 정점으로 이어진 한 너비를 보기 때문에 해당 좌
문제 출처:Silver 1문제를 읽고 구현하는 문제. 그래프 탐색을 적절히 이용하면 됐다.
문제 출처: https://www.acmicpc.net/problem/2164Silver 4어떤 방법을 이용해도 좋지만 stl deque 사용했다.
문제 출처:Silver 5queue를 적절히 이용하면 된다!첨에 보고 정답율이 95%길래 대체 어떤 문제길래 95%지? 하면서 풀었다. 알고보니 제출한 사람도 적은데 그 제출한 사람들이 거진 다 맞아서 그렇게 나온거였던ㅋㅋㅋㅋ
문제 출처: https://www.acmicpc.net/problem/1244Silver 4이해하고 로직을 잘 짜면 되는 문제다.근데 미묘하게 코드가 다를 뿐인데 계속 틀려서 의아했다..아직도 이해 못하겠는데 왜 틀렸지 코드
문제 출처:Silver 3후위 표기식이란? 중위 표기식과 다르게 연산 부호가 후위에 있는 것을 말한다.스택을 이용해 계산해주면 되는데, stack 특성상 먼저 나온게 B고 그 다음으로 나온걸 A라고 하고 계산하면 쉽다. EX) A/B자꾸 틀려서 아 뭔데? 했다가 데이터
문제 출처: https://www.acmicpc.net/problem/17086Silver 1토마토 같은 삼성 역량 문제를 풀어봤으면 쉽게 풀었을 문제! BFS를 이용한다. 대신 빈 칸에서 가장 가까운 상어니깐 빈 칸들만 따로 모아두고 그 좌표를 두고 가까운
문제 출처: https://www.acmicpc.net/problem/11399 난이도 Silver 3 접근법 > sorting 해준다음에 제일 작게 걸리는 시간부터 더해주면 된다. 통과 코드
문제 출처: https://www.acmicpc.net/problem/18429Silver 3처음에 next_permutation으로 풀었는데, 틀렸습니다가 떠서 DFS 조합으로 풀었다..
문제 출처: https://www.acmicpc.net/problem/18430Silver 1백트랙킹을 이용했다. 그리고 ㄱ모양으로 이어지기 때문에 일일이 조건문을 걸어 계산했다.
문제 출처: https://www.acmicpc.net/problem/10282Gold 4다익스트라라고 듣고 보니깐 다익스트라로 풀 수 있는 방법이 보였지만, 그 전까지는 살짝 헤맸다.일단 무방향이 아니라 b->a 방향인 점을 확인하자!해킹당한 마지막 번호까지
문제 출처: https://www.acmicpc.net/problem/1753Gold 5다익스트라로 공부해볼겸 먼저 개념을 정리하고 이 문제를 푸는 것을 추천한다.다익스트라는 start node를 정하고 그 후 모든 정점까지 걸리는 시간을 계산한다.그렇기 때문