💡Problem Solving/BOJ 108

[BOJ 15686] 치킨 배달 (Java, Python)

문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 5 2 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 2 0 0 1 1 2 2 0 1 2 0은 빈 칸, 1은 집, 2는 치킨집이다. (2, 1)에 있는 집과 (1, 2)에 있는 치킨집과의 거리는 |2-1| + |1-2| = 2, (5, 5)에 있는 치킨집과의 거리는 |2-5| + |1-5| = 7이다. 따라서, (2, 1)에 있는 집의 치킨 거리는 2이다. (5,..

[BOJ 10217] KCM Travel (Java)

문제 https://www.acmicpc.net/problem/10217 10217번: KCM Travel 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세 www.acmicpc.net 풀이 다익스트라 알고리즘을 사용하여 풀 수 있다. 보통 최소 거리(시간)을 저장할 배열로 1차 배열을 사용하지만 여기서는 비용을 고려해야 하므로 2차 배열로 생성 하여 사용한다. 소스코드 package dijkstra; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io..

[BOJ 14716] 현수막 (Java)

문제 https://www.acmicpc.net/problem/14716 14716번: 현수막 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. www.acmicpc.net 8 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0..

[BOJ 2170] 선 긋기 (Java)

문제 https://www.acmicpc.net/problem/2170 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net 풀이 스위핑 기법으로 x좌표 오름차순(같을 경우 y좌표 오름차순 정렬) 후, 라인을 하나씩 체크하면서 길이를 더해나간다. 4 1 3 2 5 3 5 6 7 예제 데이터를 아래와 같이 정렬 한다. 1--3 2---5 3--5 6-7 prev는 현재까지 진행된 라인의 y값 중 가장 큰 값을 저장 1--3 길이 2 prev = 3 2---5: 길이: 2 prev가 3이므..

[BOJ 5419] 북서풍 (Java)

문제 https://www.acmicpc.net/problem/5419 5419번: 북서풍 각 테스트 케이스에 대해서, 북서풍을 타고 항해할 수 있는 섬의 쌍의 수를 출력한다. www.acmicpc.net 문제 해석 강한 북서풍이 불고 있다. 이 뜻은 동쪽과 남쪽 사이의 모든 방향으로 항해할 수 있다는 뜻이다. 북쪽이나 서쪽으로 항해하는 것은 불가능하다. 작은 섬이 여러 개 있는 바다가 있다. 섬은 좌표 평면의 한 점으로 나타낼 수 있다. y 좌표가 증가하는 방향은 북쪽, x좌표가 증가하는 방향은 동쪽이다. 북서풍을 타고 항해할 수 있는 섬의 쌍의 수를 구하는 프로그램을 작성하시오. 북서풍을 타고 항해할 수 있는 섬의 쌍의 수를 구하는 문제이다. 즉 아래와 같이 화살표가 X가 증가, Y가 감소하는 방향으..

[BOJ 2357] 최솟값과 최댓값 (Java)

문제 https://www.acmicpc.net/problem/2357 2357번: 최솟값과 최댓값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100 www.acmicpc.net 풀이 Segment Tree 응용 문제이다. 2021.12.06 - [Problem Solving/BOJ] - [BOJ 2042] 구간 합 구하기 (Java) [BOJ 2042] 구간 합 구하기 (Java) 문제 https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000..

[BOJ 11505] 구간 곱 구하기 (Java)

문제 https://www.acmicpc.net/problem/11505 11505번: 구간 곱 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 곱을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net 풀이 구간 합 구하기와 비슷한 풀이다. 2021.12.06 - [Problem Solving/BOJ] - [BOJ 2042] 구간 합 구하기 (Java) [BOJ 2042] 구간 합 구하기 (Java) 문제 https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ..

[BOJ 11659] 구간 합 구하기 4 (Java)

문제 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 풀이 Segment Tree로 풀 수 있다. 2021.12.06 - [Problem Solving/BOJ] - [BOJ 2042] 구간 합 구하기 (Java) [BOJ 2042] 구간 합 구하기 (Java) 문제 https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M..

[BOJ 2042] 구간 합 구하기 (Java)

문제 https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net 풀이 Segment Tree를 이용하여 풀 수 있다. 아래 블로그를 참고 하여 학습하였다. https://m.blog.naver.com/ndb796/221282210534 41. 세그먼트 트리(Segment Tree) 이번 시간에 다룰 내용은 여러 개의 데이터가 연속적으로 존재할 때 특정한 범위의 데이터의 합을 구하는 ... blog..

[BOJ 11657] 타임머신 (Java)

문제 https://www.acmicpc.net/problem/11657 11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. www.acmicpc.net 풀이 Bellman-Ford 알고리즘이란? 최단 경로를 구하는 알고리즘 중에 하나이다. PS에 자주 사용되는 최단 경로 알고리즘으로 다익스트라, 플로이드 워셜, 벨만 포드 알고리즘이 있다. 벨만 포드 알고리즘의 특징은 간선의 가중치에 음수가 있을 때에도 최단 경로를 구할 수 있다는 점이다. 벨만 포드 알고리즘을 구현하는 단계는 아래..