
큐 자료구조 사용 과일 개수만큼 입력을 받고 일단 큐에 삽입 후 사용 과일 종류수가 2개 초과인지 이하인지 검사 만약 사용 과일 종류수가 2개 이상이라면 큐의 front에 있는 과일 종류를 전부 큐에서 pop, used배열의 개수도 조정 매 시점마다 최대 길이가 될

많이 틀렸다... 시행착오가 엄청났다제일 처음에는 그냥 주석처리했던 버블소트에서 교환 횟수를 세고, 주어진 횟수가 된다면 break 후 출력... 이라고만 생각했지만 아니었다. 이러면 사전순 배열이 아닌, 단순히 횟수만큼의 버블소팅을 하는 알고리즘이었고, 결과는 당연히

처음에는 문제를 잘못 읽어서 크레인의 무게제한만큼 박스의 수를 뺄 수 있다고 생각해서 코드를 짰고, 당연히 wa...문제를 다시 읽어보니 각 박스는 하나이고 주어지는 숫자는 무게였다는 걸 알았고, sort 후 각 크레인에 대해서 무게제한 내에서 들 수 있는 가장 무거운

간단하게 해석해보면 + 는 상하좌우, - 는 좌우, | 는 상하로 움직일 수 있고, \*은 벽인 미로에서 왼쪽 위에서 아래쪽 밑까지의 최단 경로값을 찾는 문제이다.dx dy 배열을 선언한 후 -에서는 0~1, |에서는 2~3, +에서는 0~3 인덱스의 dx dy 값을

링크 : https://www.acmicpc.net/problem/10942입력되는 수열 크기를 봤을 때 dp로 풀지 않으면 시간초과가 날 것 같아서 일단은 각 인덱스가 판별하는 수열의 시작 / 끝 인덱스를 의미하는 이차원 bool배열 dp를 선언하고, fun

문제 링크 : https://www.acmicpc.net/problem/9241구상이 쉽게 될 것 같았는데... 마지막 결과값 처리 부분이 너무 빡셌다. 많은조건분기 문제 느낌이었다.특히 번역이 이상하게 된 건지 원래 조건이 미비한 건지 모르겠으나 삽입되는 D

문제 링크 : https://www.acmicpc.net/problem/13265연결리스트로 그래프를 구현해준 후, DFS를 통해 해결했다. 모든 동그라미에 대해 탐색을 시도하되, 만약 탐색을 시도하려는 동그라미가 이미 색칠되어 있다면 그 색깔로 칠한다는 가정

문제 링크 : https://www.acmicpc.net/problem/1709기하학 문제다.인터넷 사이트로 원 그래프를 그려보면서 생각한 알고리즘은 원의 선이 x = k을 지날 때의 y값과 x = k + 1을 지날 때의 값의 차이를 이용해야겠다고 생각했다.

문제 링크 : https://www.acmicpc.net/problem/12946문제를 읽고 처음 생각한 방식은 모든 지점을 돌면서 색칠해야 하는 점이 보이면 0부터 시작하는 색깔 배열로 칠하되, 배열이 육각형 모양이므로 주변 6부분을 탐색한 후, 사용하지 않

문제 링크 : https://www.acmicpc.net/problem/1967그래프 중 트리 문제이다. 문제를 보자마자 지난 학기 알고리즘 시간에 들었던 트리의 지름을 구하는 논리가 기억나서 편하게 푼 것 같다.임의의 노드에서 가중치가 제일 높은 점까지 갈

문제 링크 : https://www.acmicpc.net/problem/14500처음 문제를 보고는 그래프 탐색인가? bfs? dfs? 감이 전혀 안 잡혀서 그림판으로 무작정 그려가면서 어떤 블록들이 놓일 수 있는지를 확인했다.처참한 그림실력...아무튼 블록들

문제 링크 : https://www.acmicpc.net/problem/2877문제와 입출력 예시를 보자마자 이진수가 먼저 떠올랐고, 몇개 예시를 적어보면서 규칙성을 확인해 보았다.규칙을 찾아 보니 4를 0, 7을 1로 바꿔서 생각한다면 0,1,00,01,10

문제 링크 : https://www.acmicpc.net/problem/5639이진트리에 관한 문제다. 전위순회를 후위순회로 바로 바꾸기보다는 그냥 트리를 구현한 후 값을 삽입해서 트리를 만든 다음, 후위순회를 출력하는 방식을 사용하기로 했다. 후위순회 구현은

문제 링크 : https://www.acmicpc.net/problem/16953BFS로 풀되, 수가 증가하기만 하고 n10 + 1 혹은 n2의 값으로만 증가하기에 visited를 선언해서 중복 체크를 할 필요는 없어 보였다.근데 또 int / long lon

문제 링크 : https://www.acmicpc.net/problem/1043문제를 이해한 후에 떠올린 풀이는 전체 인원을 bool형태로 선언한 후, 각각의 파티에 참여한 인원들을 그래프의 간선으로 이해하고 문제에서 말하는 진실이 전염된다는 느낌으로 파티 참

문제 링크 : https://www.acmicpc.net/problem/17070발상은 어렵지 않았는데 구현하는데 의외로 애를 먹은 문제...현재 상태와 현재 상태에 따라 체크해야 하는 다음 구간의 좌표를 체크하고, 옮기는 게 가능하다면 다음 파이프 끝부분 좌

문제 링크 : https://www.acmicpc.net/problem/1932문제를 처음 읽었을 때는 DFS? 이게 왜 실버2 문제지? 하고 그냥 바로 DFS로 구현했다가 바로 시간초과를 먹었다... 다시 잠시 생각해보니 단순 DFS로 구현한다면 시간 복잡도

문제 링크 : https://www.acmicpc.net/problem/11725각 노드의 부모 노드를 출력하는 문제이다. 생각해본 아이디어는 인접리스트로 트리를 구현한 다음 노드 1에 대해 DFS를 해서 1에서의 거리를 dist 배열에 저장하고, 각 노드에

문제 링크 : https://www.acmicpc.net/problem/1987보자마자 DFS 탐색문제구나 싶었다. 중복된 알파벳을 쓰면 안되기 때문에 used 배열을 선언하고 dfs 함수에 파라미터로 넘겨주는 방식을 사용했다. 아스키코드로 인덱스 기반 배열

문제 링크 : https://www.acmicpc.net/problem/1149일반적인 DFS로 각 단계로 내려갈때마다 2개의 경우를 체크한 후 최솟값을 갱신하는 방법이 있지만, N개의 단계가 있다면 시간복잡도가 O(2^N)이기에 시간 내에 풀 수 없다. 그래

문제 링크 : https://www.acmicpc.net/problem/1916문제를 보고 알고리즘 수업시간에 배운 다익스트라 알고리즘이 떠올랐는데, 우선순위 큐로 구현하려고 했는데 기억이 가물가물해 구현에 어려움을 겪었다. 그래서 이번 기회에 정확히 코드 구

문제 링크 : https://www.acmicpc.net/problem/11660구간 합이므로 dp로 풀 수 있겠다고 생각했고, 내가 생각한 방식은 2차원 표의 각 행을 1차원 구간합으로 생각해서 각 행마다 구간합 표를 작성해둔 뒤, 문제에서 제시하는 행구간을

문제 링크 : https://www.acmicpc.net/problem/1991기본적인 트리 문제다. A를 루트노드로 하는 빈 트리를 만든 후 입력받은 값을 토대로 현 시점까지 만들어진 트리를 재귀로 완전탐색하며 새로운 값이 들어갈 자리에 새 노드를 만드는 방

문제 링크 : https://www.acmicpc.net/problem/11404플로이드 - 워셜 알고리즘을 통해 풀었다. 시행착오는 처음 조건에서 갈 수 없는 곳을 0으로 표시한다는 조건을 잊은 것이고, 그 조건을 체크하는 과정에서 INT_MAX를 썼다가 정

문제 링크 : https://www.acmicpc.net/problem/1079구현 문제다. 문제 호흡이 길기 때문에 각 턴에서 어떤 상황이 일어나는지, 그리고 어떤 것을 갱신해서 답을 구해야 하는지부터 살펴보았다.우선 참가자(생존자)의 짝/홀수 여부로 낮/밤

문제 링크 : https://www.acmicpc.net/problem/1888bfs 탐색 문제다. 곰팡이의 좌표를 기준으로 속도에 따라 번지는 양을 구현해야 하는데 생각보다 구현이 어렵진 않았다.단지 처음 시도에는 원본 그래프 arr에 실시간으로 곰팡이를 갱

문제 링크 : https://www.acmicpc.net/problem/17144구현해야 할 기능은 미세먼지의 확산, 공기청정기의 작동 2가지이다.미세먼지의 확산을 처음에는 bfs로 구현해야 하나 싶었는데, bfs로 구현한다면 i,j에서 한 시점에 미세먼지가

문제 링크 : https://www.acmicpc.net/problem/12851bfs로 최단경로를 찾으면 되겠다는 생각이 제일 먼저 들었다. 위치 / 길이를 pair로 저장해서 bfs탐색을 했는데, 마지막 답 처리 부분에서 생각할 부분이 좀 있었다. 새로운

문제 링크 : https://www.acmicpc.net/problem/13913숨바꼭질 시리즈에서 경로를 추가 출력하는 문제이다. pair 말고 tuple을 사용한 후 배열을 조합론 백트래킹처럼 방문한 인덱스를 추가 후 빼주는 연산만 추가했다.

문제 링크 : https://www.acmicpc.net/problem/2638문제 조건에서 모눈종이 맨 가장자리에는 치즈가 놓이지 않는다고 하였으므로, (0,0)을 시작점으로 BFS를 통해 이어져 있는 0에 대해서만 탐색하되, 만약 0에 인접한 1이 있다면

문제 링크 : https://www.acmicpc.net/problem/1629입력 크기가 어마어마해서 시간복잡도를 첫 시도에 최대한 줄이려고 많은 기법을 넣어보려 했다. 우선 일반적 거듭제곱(O(N)) 이 아닌 분할정복 재귀를 이용한 거듭제곱(O(log N)

문제 링크 : https://www.acmicpc.net/problem/9935진짜... PS를 시작한지 꽤 됐다고 할 수는 없지만 지금까지 풀어본 문제들 중에서는 제일 어려웠던 것 같다... 플레 문제들보다도 더 시행착오가 많았다첫 시도는 문자열 자체의 인덱

문제 링크 : https://www.acmicpc.net/problem/1753다익스트라 알고리즘이다. 예전에 한번 구현한 적이 있었는데 기억이 오래돼서인지 거의 다 까먹은 것 같다. 관련된 문제를 여러번 풀면서 다시 리마인드해야할 것 같다.

문제 링크 : https://www.acmicpc.net/problem/3495bool 변수 check(초기값 false)를 선언한 후 도형을 한 줄씩 읽어가면서 / 혹은 \\이 나타나면 true, 다시 나타나면 false로 바꿔가면서 도형의 내,외부를 판단했

문제 링크 : https://www.acmicpc.net/problem/11053웰노운으로 알려진 LIS 알고리즘 문제이다.문제의 예시를 통해 알고리즘을 표현하면0,10,20,10,30,20,50이 초기 상태의 arr 배열이고(일부러 앞에 0 한칸을 추가했다)

문제 링크 : https://www.acmicpc.net/problem/11055전에 풀었던 가장 긴 증가하는 부분 수열과 비슷한 문제이다. 이중 for문을 설정한 뒤 i보다 작거나 같은 j의 인덱스에서 arri보다 arrj가 작다면 sumdpi를 현재 sum

문제 링크 : https://www.acmicpc.net/problem/14002가장 긴 증가하는 부분 수열의 연장판 문제이다. 아이디어 자체는 떠올리기 쉬웠다. 가장 긴 증가하는 부분 수열 길이를 구하고, 그 값을 maxval이라고 지정한 후 dp 배열을 역

문제 링크 : https://www.acmicpc.net/problem/9251문제를 이해하는 것부터 뭔가 난감했다. 대체 어떻게 접근해야할지를 모르겠어서 일단 엑셀로 나름의 규칙성을 파악해보기 위해 기록을 해보았다.대략 이런 규칙성을 찾을 수 있었고, 구현하

문제 링크 : https://www.acmicpc.net/problem/3188얼핏 보면 그래프 탐색 문제 같지만, 이 문제는 최적 경로 라는 개념을 직접 정의했고, 최적 경로의 정의는 다음과 같다.지나온 경로의 모든 정수를 곱한 값을 10진수로 표현했을 때,

문제 링크 : https://www.acmicpc.net/problem/25603아이디어 자체는 어렵지 않았다. 슬라이딩 윈도우로 해결하면 될 것 같지만 시간 초과가 발목을 잡는 문제였다.예시로 나와있는 입출력은 N이 작은 수여서 크게 티가 나지 않았지만, N

문제 링크 : https://www.acmicpc.net/problem/32758문제만 봐서는 규칙성이 안 보여서 직접 적어가면서 규칙성을 찾아보았다.그랬더니 나름대로 규칙성이 보였고, 점화식을 정리했다.구현 자체는 어렵지 않아 보였고, 그대로 간단하게 구현한

문제 링크 : https://www.acmicpc.net/problem/2477가벼운 마음으로 풀려고 했다가 움찔했다. 난이도가 어려운 편은 아니지만 생각했던 것처럼 구현이 수월하지는 않았던 것 같다.문제의 로직상 6번 주어지는 방향번호(1,2,3,4) 중 중

문제 링크 : https://www.acmicpc.net/problem/2096문제만 보면 간단한 DP 문제 같다. 그냥 풀면 슥 하고 풀리겠지 하고 그냥 코드를 짰는데, 바로 메모리 초과를 먹어 버렸다. 이 문제의 핵심 부분은 이 부분이었다.??.?.?메모리

문제 링크 : https://www.acmicpc.net/problem/2285처음에는 여러 풀이가 떠올랐던 것 같다. 우선 생각을 정리해보고 직접 해보는 게 낫겠다 싶어서 무작정 종이랑 펜으로 떠오르는 예시와 풀이를 생각해 봤는데, 잘 안 됐던 것 같다.맨

문제 링크 : https://www.acmicpc.net/problem/16936문제에서 요구하는 것은 특정 규칙에 따라서 순서가 정해진 수열을 랜덤하게 섞은 수열을 원래 순서대로 되돌리는 것인데, 규칙이 이렇게 정의되어 있다.나3: x를 3으로 나눈다. x는

문제 링크 : https://www.acmicpc.net/problem/1080문제에서 정의한 행렬 변환 연산은 $3 \\times 3$ 범위에 있는 값을 0 -> 1, 1 -> 0으로 바꾸는 연산이다.문제를 풀기 위해서는 $3 \\times 3$이라는 범위에

문제 링크 : https://www.acmicpc.net/problem/1027문제에서 요구하는 것에 대한 발상 자체는 어렵지 않다. 기준이 되는 빌딩과 나머지 빌딩들 각각을 잇는 선을 그은 후, 그 선을 넘어서는 빌딩이 있는지 체크한 후에 없다면 카운트를 증

문제 링크 : https://www.acmicpc.net/problem/17609회문 / 유사회문 판정 자체는start 인덱스와 end 인덱스 투 포인터 로직유사회문 판정을 위한 delcount를 인자로 넘겨주는 재귀 함수 로직을 통해 처리할 수 있었다. 완벽

문제 링크 : https://www.acmicpc.net/problem/1520처음에는 단순한 DFS로 풀었다가 바로 시간초과가 떴다. 그래서 시간을 줄일 방법을 생각하다가visited를 참조로 dfs에 전달하고 true / false값을 직접 갱신아예 vis