백준

PS/알고리즘 문제풀이

[백준] 14949번 불 끄기(java)

https://www.acmicpc.net/problem/14939 14939번: 불 끄기 전구 100개가 10×10 정사각형 모양으로 늘어서 있다. 전구에 달린 스위치를 누르면 그 전구와 위, 아래, 왼쪽, 오른쪽에 있는 전구의 상태도 바뀐다. 전구 100개의 상태가 주어지면 모든 전구를 끄 www.acmicpc.net 브루트포스로 풀 수 있는 문제이다. 플레 난이도답게 아이디어를 생각하기 어려운 문제였다. 핵심 스위치를 할 때마다 주변과 현재 위치의 상태가 변하게 된다. 즉 컨트롤하기 어렵다는 문제가 있다. 이를 생각해 보면 위쪽의 경우 아래에서 스위치를 하면 컨트롤할 수 있게 된다 -> 맨 아래는 컨트롤불가 따라서 맨 첫 줄의 모든 경우의 수를 생각하고, 마지막 줄 이전까지의 행을 원하는 대로 바꾼..

PS/알고리즘 문제풀이

[백준] 9328번 열쇠(java)

https://www.acmicpc.net/problem/9328 9328번: 열쇠 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 www.acmicpc.net 이번에도 bfs 문제이다. 이와 비슷한 문제를 리트 코드에서도 풀었던 기억이 있는데, 그에 비하면 쉽다고 생각한다. 이유는 최단 거리를 찾는 문제는 아니기에 정보를 공유할 수 있기 때문이다. 핵심 우선 최단거리를 찾는 문제가 아니라 찾을 수 있는 열쇠의 수를 찾는 것이다. 이전에 bfs 특성상 어떤 열쇠를 먼저 먹고, 어떤 식으로 이동해야 가장 빠르게 도달할 수 있는지를 찾는 문제라면 복잡해질 수 있다.(아래..

PS/알고리즘 문제풀이

[백준] 13460번 구슬 탈출2(java)

https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 조금 난도가 있는 bfs 문제이다. 핵심 중요하다고 생각하는 부분은 빨간 구슬과 파란 구슬이 움직일 때 둘의 위치에 따라 먼저 움직이는 순서가 달라져야 한다는 것이다. 만약.. RB가 있을 때 왼쪽으로 움직인다면 R -> B순으로 움직여야 한다. 정답 코드 import java.util.LinkedList; import java.util.Queue..

PS/알고리즘 문제풀이

[백준] 16234번 인구이동(java)

https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net bfs를 사용하는 구현문제이다. 핵심 이 문제는 어떤 식으로 접근할지 충분히 생각하고 시작하면 쉽게 풀 수 있다. 우선 나는 각각 자리마다 bfs를 하여 이동한 곳을 모두 체크하고, 이후에 체크를 하지 않은 곳을 탐색하는 방법을 사용하였다. 또한 한 번에 bfs로 이동한 곳은 좌표를 담아서 changeMap을 통해 자리의 값을 바꿔주었다. 정답 코드 import java.util.A..

PS/알고리즘 문제풀이

[백준] 3055번 탈출(java)

https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net bfs 문제이다. 핵심 S에서 D로 도달하는 것이 기본적인 목표이다. 하지만 물이 있는 곳은 건널 수 없고, 물 또한 퍼지기 때문에 이를 잘 고민해야 한다. 정답 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static char[][] map; static int r; st..

PS/알고리즘 문제풀이

[백준] 4485번 녹색 옷 입은 애가 젤다지?

https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 핵심 (0,0)에서 시작하여 (n-1, n-1)로 갈 때 가장 최소의 코인을 잃은 상태로 가야 한다. 즉 다익스트라를 사용해야 한다. 정답 코드 import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; import java.util.Scanner; class Main { static Lis..

PS/알고리즘 문제풀이

[백준] 2580번 스도쿠(java)

https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 백트래킹 문제이다. 핵심 입력값 0 이 있는 곳에 1~9까지 가능한 숫자를 대입하면서 스도쿠를 완성시켜야 한다. 전형적인 백트래킹 문제이다. 정답 코드 import java.util.Scanner; class Main { static int[][] map = new int[9][9]; public static void main(String[] args) { Scanner sc = new Scann..

PS/알고리즘 문제풀이

[백준] 1132번 합(java)

https://www.acmicpc.net/problem/1132 1132번: 합 N개의 수가 주어진다. 이 숫자는 모두 자연수이고, 알파벳 A부터 J가 자리수를 대신해서 쓰여 있다. 이 알파벳은 모두 한 자리를 의미한다. 그리고, 각 자리수는 정확하게 알파벳 하나이다. 0으로 www.acmicpc.net 전에 풀었던 문제에서 조건이 하나 추가되었다. 핵심 위의 문제는 만약 ABC + DAB 라면 100A + 10B +C + 100D+ 10A+B로 둘 수 있다. 이를 110A + 100D +11B +C로 둘 수 있다. 따라서 A에 가장 큰 9, D에 8B에 7C에 6을 넣어주면 된다. 단 새로운 조건이 추가되었다. 맨 앞자리가 0이 되면 안 된다. 위의 경우에는 해당되지 않지만, 수가 많아지면 0의 조건..

PS/알고리즘 문제풀이

[백준] 1525번 퍼즐(java)

https://www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net bfs를 이용하여 풀 수 있다. 핵심 2차원 배열을 일렬로 두고 그 값자체를 가지고 판단하면 편하게 구할 수 있다. 값의 위치를 바꿀 때 각각의 index를 알아야 하는데, 이때 StringBuilder를 이용하면 쉽게 위치를 바꿀 수 있다. StringBuilder.setCharAt -> 특정 위치에 char를 삽입할 수 있다. 이를 활용하여 풀어보자. 정답 코드 import java.util.HashMap; import java.util.LinkedList; import..

PS/알고리즘 문제풀이

[백준] 17135번 캐슬 디펜스(java)

https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 조합과 완전탐색을 사용하여 풀 수 있다. 핵심 궁수는 N+1위 치에 3명 배치할 수 있다. 1 턴에 1명을 맞출 수 있고, 다른 궁수도 같은 적을 맞 출 수 있다. 궁수의 위치를 바꾸어가며 그때마다 잡은 적의 수를 카운트해야 한다. 정답 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..

javajoha
'백준' 태그의 글 목록