2022/01 26

[백준 14442] - 벽 부수고 이동하기 2(JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net [문제 풀이] 이전에 포스팅한 백준 2206 - 벽 부수고 이동하기 와 풀이가 크게 달라질 게 없다. [ 2206문제 해설 ] 백준 - 2206번을 풀 수 있으면 어렵지 않게 이 문제를 해결할 수 있을 것이다. 이번 문제는 이전 문제와 다르게 벽을 K개 부실 수 있는 조건이 추가되었다. K개를 부실 수 있는 조건을 지켜 코드를 만들면 된다. B..

백준 문제풀이 2022.01.06

[백준 2206] - 벽 부수고 이동하기(JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net [문제 풀이] 최단 경로를 찾는 BFS로 해결할 수 있다. 만약 모든 벽을 0으로 바꾸고 찾게 된다면 N과 M 제한 조건에 의해 (1000*1000)^2의 복잡도를 가지게 되어 시간 초과가 된다. 이 문제의 핵심은 벽을 부수고 이동하는 것이 빠르면, 벽을 한 개 까지 부수고 이동하여도 된다 라는 조건이 있다. 즉 어떤 지점에 도착했을 때 벽을 부수고 온 ..

백준 문제풀이 2022.01.06

[프로그래머스 Level2] 소수 찾기 (JAVA)

[문제] 출처 - https://programmers.co.kr/learn/courses/30/lessons/42839?language=java 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr [문제 풀이] 이 문제는 소수를 판단하는 함수와 dfs방식으로 찾는 함수를 만들어서 구현을 해준다. dfs함수를 구현할때 String 값을 Integer값으로 변경하여 찾을 수 있는 값 전부를 중복없이 리스트에 담아주고 리스트에 담긴 값들을 소수판단하여 세주면 된다. 백트래킹 방법 사용 for문을 사용해 ..

프로그래머스 2022.01.04

백트래킹(Backtracking) 알고리즘 - JAVA

퇴각검색(영어: backtracking, 한국어: 백트래킹)은 한정 조건을 가진 문제를 풀려는 전략이다. "퇴각검색(backtrack)"이란 용어는 1950년대의 미국 수학자 D. H. 레머가 지었다. -출처 위키백과 백트래킹(Backtracking) 해를 찾아가는 도중, 지금의 경로가 해가 될 것 같지 않으면 그 경로를 더 이상 가지 않고 되돌아갑니다. 이를 가지치기라고 하는데, 불필요한 부분을 쳐내고 최대한 올바른 쪽으로 간다는 의미 입니다. 가지치기를 얼마나 잘하느냐에 따라 효율성이 결정되게 됩니다. 즉 모든 가능한 경우의 수 중에서 특정한 조건을 만족하는 경우만 살펴보는 것 입니다. 주로 문제 풀이에서는 재귀로 모든 경우의 수를 탐색하는 과정에서 답이 절대로 될 수 없는 상황을 정의하고 그 경우 ..

알고리즘 정리 2022.01.04

[백준 16234] - 인구이동(JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net [문제 풀이] 이 문제는 BFS 와 구현을 해야한다. 그래서 다소 어렵게 느껴졌다. 모든 좌표에 대하여 BFS 탐색을 시작한다. 국경선을 공유하는 두 나라의 인구차이 L명 이상 R명 이하면 방문처리를 한다. ArrayList를 사용하여 방문한 좌표값을 기록한다. BFS 탐색이 끝나면 List에 있는 좌표값을 이용해 각 칸의 인구수를 (연합의 인구수) / (연합을 이..

백준 문제풀이 2022.01.03

[백준 1208] - 부분수열의 합2 (JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/1208 1208번: 부분수열의 합 2 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net [문제 풀이] 백준 부분수열의 합 이라는 문제와 같지만 N제한이 최대 40이다. 백트래킹 방법을 사용하면 2^40 의 방법이 나와서 이 방법으로는 해결할 수 없다. 전체 수열을 절반으로 쪼개어 모든 방법을 구해야 한다. 2^20 + 2^20 = 1048576*2 이므로 모든 경우를 구할 수 있다. 주어진 N개의 배열을 반으로 쪼개고 그 모든..

백준 문제풀이 2022.01.01