[백준] 11054 - 가장 긴 바이토닉 부분 수열(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/11054풀이DP문제이며 푸는데 오래 걸리지는 않았으나,문제에서 놓친 부분이 있어 마지막에 정답을 계산하는 과정에서 조금 헤맸다. 문제를 잘 읽도록 하자 ^_^가장 먼저 오름차순, 내림차순의 길이를 저장하는 DP 배열을 각각 선언해 준다.DP는 "해당 자리의 숫자를 포함"하여 오름차순, 내림차순을 만족하는 수열의 길이를 저장한다.증가(혹은 감소) 수열을 만족했을 때 DP값에서 1을 더해 현재 DP에 저장하도록 하자.오름차순은 인덱스가 증가하는 방향으로, 내림차순은 감소하는 방향으로 순회하도록 했다.다음 {1,2,2,3,1,4} 수열을 예로 들어 보았다.마지막으로 정답은 각각의 자리의 오름차순, 내림차순 DP를 더해 준 다음 1을 빼 준 값..
[백준] 1375 - 나이(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1375어려운 점문제의 입출력에 대한 설명이 아쉬웠다."이름의 길이는 6byte 이하이다"를 주목하면, 입력으로 주어지는 a, b가 문자열이 될 수 있다는 걸 살포시 유추할 수 있다..이 부분을 놓쳐 시간을 많이 썼다.풀이문제에서는 첫 번째로 대소 관계를 입력받고 두 번째로는 쿼리를 입력받는다.문제를 해결하기 위해서는 크게 두 가지를 수행해야 한다.대소 관계 입력 처리 및 관계를 정립Map>을 선언Key : 나이가 많은 이름 저장Value : Key보다 어린 이름을 저장`Alice Jude`, `Alice Tom` 와 같이 이름을 입력받는다면 Map은 다음과 같다.Alice : [Jude, Tom] 의 구조를 갖는다Jude, Tom를 키로..
[백준] 1197 - 최소 스패닝 트리(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1197풀이제목에서도 알 수 있지만 최소 신장 트리 MST 문제이다(Minimum Spanning Tree)BFS, DFS에서는 방문 여부 체크하는 visited 배열을 쓰다가 사이클을 신경 쓰는 문제를 오랜만에 풀어 흥미로웠다..본론으로 돌아가자면 기본적으로 부모(루트) 노드에 대한 접근이 필요하다.부모 노드에 대한 정보를 저장하기 위해 부모 노드의 인덱스를 값으로 가지는 일차원 배열(parent[])을 선언하여 사용해 주도록 하자.여기서 부모 노드가 되는 조건은 parent[i] = i일 때가 된다.또한 부모 노드가 같은 정점이라면, 같은 트리에 속해있다고도 이해할 수 있다.위 조건을 염두에 두고 핵심적인 두 가지 기능을 구현하도록 하..
[백준] 12180 - Googlander (Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/12180어쩌다 영어 문제를 풀게 되었다..풀이본문에 따르자면 "우아한" 경로의 수를 출력한다.우아한 경로를 만들기 위한 조건은 다음과 같다.진행 방향을 그대로 유지하는 방법, 진행 방향에서 오른쪽으로 90도 회전하여 진행하는 방법이다.만일 위 두 가지 경로가 이미 방문한 경로이거나, 범위를 벗어난 경우 그 자리에서 멈추고 종료한다.보통은 시작점과 끝점이 동일한 문제가 많이 주어졌으나, 해당 문제는 우아한 경로를 만들지 않는 경우에는 종료하는 형태를 띄어 진행할 때마다 방문 정보를 가지고 있어야 한다.문제에서 주어지는 행/열의 범위는 10으로 적은 편에 속하며, 직진/우회전이라는 2가지 경우의 수를 갖고 있기에 재귀를 선택하여 풀이했다.물..
[백준] 12865 - 평범한 배낭(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/12865풀이DP 문제의 정석으로 보인다.. 항상 어떤 데이터를 중점으로 배열을 구성할 지 정하도록 하자.문제에서 주어진 데이터는 가방의 개수 N, 무게 W, 가치 V이다.그 중 변동이 적어 보이는 무게 W를 기준으로 잡아 최대 가치 V를 구하는 방향을 택하였다.그러기 위해 배열 DP[W]를 선언해 주도록 한다.이 문제는 입력을 받으며 DP 배열을 업데이트 해 주었다.새로운 물건에 대한 입력(wVal - 무게, vVal - 가치) 을 받을 때wVal : 만일 기존의 DP[wVal] 보다 높다면 업데이트wVal + 1 ~ maxWeight : DP[maxWeight-wVal] + vVal, DP[maxWeight-wVal]와 비교하여 ..
[백준] 1025 - 제곱수 찾기 (Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1025N, M 이 적은 점을 참고하면 모든 해에 대해 탐색하며 업데이트하는 방향으로 진행하였다.풀이행/열에 해당하는 row/col을 순환하며 arr[row][col]부터 시작하는 등차수열을 만들어 제곱근일 경우 최댓값을 업데이트해 준다.또한 row, col을 시작으로 하는 등차수열을 만들어준다. 이때, 등차는 [-8,8]을 선정해도 무리는 없을 듯 하나, 나 같은 경우 총 행/열 중 큰 값으로 진행했다.등차는 열, 행에 개별로 적용하자열에 해당하는 등차는 oc, 행에 해당하는 등차는 or로 선언하고 풀이했다.그림으로 보자면 다음과 같을 것이다.물론 등차에 해당하는 oc, or를 더했을 시 범위를 벗어나는지 체크해야 한다.열 등차, 행 ..