본문 바로가기

Algorithm

(175)
[BOJ] 2146. 다리만들기 Python https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 1. 해결방법 BFS 문제이다.. 쉬울줄 알았는데 어려웠다. 2개의 큐를 사용해야 하고, 시간 복잡도를 고려해야 한다. 시간나면 다시 한번 풀어봐야겠다. 1. 각 섬을 구분짓기 위해 bfs1을 돌아서 각 섬들이 고유의 번호를 갖기 위해 값을 하나씩 증가시켜 maps을 저장했다. 2. 2중 for문으로 특정 섬부터 시작해서 두 번째 bfs2를 돈다. 3. 유효성 검사를 하고 자신의 섬이 아닌 다른 섬을 ..
[BOJ] 13549. 숨바꼭질 3 Python https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 1. 해결방법 DFS인줄 알았으나, 재귀에러에 두들겨 맞고 BFS로 풀었다. 왜 bfs인지는 문제를 풀면서 느낌;; 1. 현재 인덱스 위치랑 time을 q에 append 한다. 2. x * 2, x - 1, x + 1의 경우에는 가중치가 0 그리고 1로 다르므로 bfs를 이용하여 3가지 모두 탐색을 한다. 3. 유효성 검사와 방문체크도 하고, 새로운 인덱스 위치와..
[BOJ] 6593. 상범 빌딩 Python https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 1. 해결방법 상 하 좌 우 위 아래 6 방향으로 탐색해야하므로 당연히 BFS 문제이며, q를 이용해서 z, y, x 인덱스 뿐만 아니라 time 이라는 변수까지 추가해서 q에 담아내는 노하우가 있으면 좋을지도..? 문제 글을 잘 읽자.. 입력 관련 글을 안봐서 입력에 시간 다 보냈다;;; 1. L, R, C가 0을 입력받을 때, 종료되야 하므로 while문을 이용해서 무한 반복을 하고, 2차원 배열을..
[BOJ] 10026. 적록색약 Python, Java https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 1. 해결방법 BFS로 해결했다. DFS보단 BFS가 훨씬 간단해 보인 단순한 이유;; R과 G가 같은 것으로 판단하기 위해서 단순하게 2중 for문을 이용해서 R을 G로 바꾸고 BFS를 한번 더 돌렸다. 끝;; 너무 쉬움.. 2. 정답코드 Python import sys from collections import deque input = sys.stdin.readline N = int(i..
[BOJ] 2573. 빙산 https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 1. 해결방법 BFS로 해결했다. 빙산이 모두 사라질 때를 카운트 해서 출력해야하므로, while문을 사용해서 year 카운트 변수를 루프때마다 +1하는 로직을 구상하였다. 또한, BFS를 돌면서 빙산의 그룹 카운팅을 하고 나서 빙산의 크기를 줄이는 로직을 추가해서 시간 복잡도를 최소한으로 줄였다. 1- 1. BFS 로직 def bfs(y, x): q = deque() q.append((y,..
[BOJ] 9205. 맥주 마시면서 걸어가기 https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 1. 해결방법 맥주가 20병 있다고 한다. 50미터 이동할 때마다 맥주 한병씩은 꼭 마셔야 하는데, 여기서 맥주의 개수를 카운트 하기 보다는 맥주를 못마시게 될 경우와 맥주를 마시면서 페스티벌에 도착하는 경우만 생각하면 되기 때문에 맥주 50미터당 맥주 20병을 다 마실 수 있는 거리인 1000미터를 기준으로 해결해야 한다. 1000미터가 키 포인트 이다. 집에서 편의점까지의 거리를 구한 다..
[BOJ] 7569. 토마토 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 1. 해결방법 BFS 문제인것은 보자마자 알 것이다. 다만 특징은 3차원이라는 것이다. 어떻게 할까? map을 이용해서 2차원 배열을 만들고, 그것을 높이(H) 만큼 다시 for문으로 받으면 된다. 1. x, y, z방향의 디폴트 값을 설정 2. 시작하기 전 익은 토마토 위치 값을 q에 append 3. bfs를 돌면서 토마토가 익으면 day + 1하고 q.append 4...
[SWEA] D3. Sum (JAVA) https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYUu1hG6O44DFARs&contestProbId=AV13_BWKACUCFAYh&probBoxId=AYUyLam6ojkDFARs&type=PROBLEM&problemBoxTitle=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98+Track+%28%EB%82%9C%EC%9D%B4%EB%8F%84+%EC%A4%91%29&problemBoxCnt=5 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 해결방법 그냥 Math.max로 행, 열, 대각선의 합을..