반응형

백준 57

[백준 Baekjoon] 11479번 통나무 건너뛰기 - JAVA

백준 Baekjoon 11479번 통나무 건너뛰기 - JAVA 문제 풀이 가장 난이도가 낮은 배열로 만드는 방법이 무엇인지 찾아야 한다. 첫번째 통나무와 마지막 통나무도 연결된 것으로 단순히 정렬하는 것으로는 답을 구할 수가 없다. 문제에서 주어진 {2, 4, 5, 7, 9}의 답은 [2, 5, 9, 7, 4]이다. 예시를 보면 가장 작은 값들을 양 끝에 두고 가운데로 갈 수록 갚이 커진다는 것을 보고 문제 풀이를 유추할 수 있다. 주어진 입력 배열을 정렬시킨다. 정렬된 배열의 숫자를 새로운 배열 양끝에 번갈아 가며 넣는다. 배열에서 최대 난이도를 찾아 출력한다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io..

[백준 Baekjoon] 5212번 지구 온난화 - JAVA

백준 Baekjoon 5212번 지구 온난화 - JAVA 문제 설명 입력받은 지도의 땅 주변의 바다의 수를 확인하여 3면이 바다인 경우 바다로 변경하고, 출력할 범위를 찾아 출력하면 되는 문제이다. 입력받은 지도에서 땅을 바다로 변경하는 경우 다른 땅의 주변 바다가 늘어나 별도의 배열을 만들어 사용해야 한다. 땅의 경우 주변 바다의 수를 검사 변경해야 하는 경우 변경 50년 후에도 땅인 경우 출력범위를 갱신 출력범위의 지도를 출력 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { pu..

[백준 Baekjoon] 3077번 임진왜란 - JAVA

백준 Baekjoon 3077번 임진왜란 - JAVA 문제 풀이 올바른 순서가 주어졌을 때, 작성한 답안을 2개씩 비교하여 순서가 올바르면 1점씩 증가한다. N이 5일 때 {0, 1}, {0, 2}, {0, 3}, {0, 4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4} {3, 4} 이렇게 두개씩 짝을 지어 올바른 순서의 순서와 같은지 비교하면 된다. 해전을 HashMap을 사용하여 문자열의 순서를 저장하여 쉽게 찾을 수 있도록 하면 된다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import ja..

[백준 Baekjoon] 16992번 로마 숫자 만들기 - JAVA

백준 Baekjoon 16992번 로마 숫자 만들기 - JAVA 문제 풀이 4가지의 로마 숫자를 활용하여 만들어 낼 수 있는 수의 개수를 찾는 문제이다. 같은 숫자를 여러번 사용가능한 중복 조합의 문제이다. 순서는 신경쓰지 않아 백트래킹의 반복문에서 i번 부터 for문을 시작하면 된다. 주의할 점은 이 문제에서는 로마 숫자로 만든 수를 찾는 문제로 51 (50 + 1 * 10), (5 * 10 + 1) 과 같이 다른 방법으로도 같은 수를 만들 수 있어 중복 검사를 해줘야 한다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public st..

[백준 Baekjoon] 5014번 스타트링크 - JAVA

백준 Baekjoon 5014번 스타트링크 - JAVA 문제 풀이 위, 아래 버튼 두개를 잘 조합하여 원하는 층으로 최단거리로 이동하는 문제이다. 이런식으로 최단거리를 구할때에는 BFS탐색을 사용하여 쉽게 풀 수 있다. 층의 수가 1000000까지 밖에 안되고 위, 아래 두가지만 있어 큐에 위로 갔을 경우 아래로 갔을 경우 두 가지 모두 추가해주고, 도착하면 이동 횟수를 출력함으로서 쉽게 구할 수 있다. 제한사항이 크지 않아도 위, 아래의 조합에서 중복이 많이 발생 할 수 있어 boolean 배열로 체크를 해줘야 한다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; impor..

[백준 Baekjoon] 1715번 카드 정렬하기 - JAVA

백준 Baekjoon 1715번 카드 정렬하기 - JAVA 문제 풀이 문제의 예시에서 처럼 최소한의 비교를 위해서는 매번 가장 작은 2개의 묶음을 비교하면 된다. 매번 가장 작은 묶음을 쉽게 찾아 꺼내기 위해 우선순위 큐를 사용한다. 묶음이 1개만 남을때까지 가장 작은 두 개의 묶음을 꺼내 더한값을 총 비교횟수에 더하고 우선순위 큐에 넣어준다. while문이 종료되면 총 최소 비교 횟수가 남게 되고 출력하면 된다. 카드 묶음의 크기는 1000으로 작으나 모든 카트 묶음이 1000이라 하고 N이 100,000인 경우에는 int값의 범위를 초과하기 때문에 우선순위 큐와 총 비교 횟수는 long 타입을 사용해야 한다. 소스 코드 import java.io.BufferedReader; import java.io..

[백준 Baekjoon] 13458번 시험 감독 - JAVA

문제 풀이 문제를 읽어보면 이해하는데나 방법을 찾는데에 큰 어려움은 없는 쉬운 문제입니다. 각 시험장에서 총감독이 관리하는 인원만큼 제외하고 부감독이 몇명 필요한지 구해 총 합을 리턴하면 됩니다. 하지만 문제의 제한사항을 제대로 안보면 틀렸다고 나오는데 N이 1,000,000, 각 시험장에 1,000,000 명씩, B와 C가 모두 1이라고 가정하면 결과는 int범위를 넘어서는 큰 수가 나오게 됩니다. 총 합을 구할때에 long 타입으로 하면 이슈없이 문제를 푸실 수 있습니다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokeniz..

반응형