반응형

Baekjoon 54

[백준 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..

반응형