반응형

Java/백준알고리즘 111

[Java] 백준알고리즘 #25192 인사성 밝은 곰곰이

ENTER 를 기준으로, 채팅방에 들어온 사람이 곰곰티콘을 사용한 회수를 구하는 문제. ENTER가 입력된 시점을 기준으로 모든 사용자들은 첫번째 채팅에 곰곰티콘을 사용하고, 두번째 채팅부터는 사용하지 않는다. 결국 사용자의 중복 여부를 알아보는 문제이기 때문에 최근에 알아보았던 HashSet 기능을 활용하면 될 것이다. 2023.10.17 - [Java/개념정리] - [Java] HashSet 에 대해 알아보자 먼저 입력값이 ENTER인지 판단한다. ENTER이라면 현재까지의 HashSet에 크기(사용자 수)를 count(곰곰티콘을 사용한 횟수)에 추가하고, HashSet을 리셋해준다.(새로운 사람이 들어왔으므로 첫 채팅은 곰곰티콘을 사용) ENTER가 아닌 사용자라면 HashSet에 입력받은 사용자를..

[Java] 백준알고리즘 #1037 약수

어떤 수 N에 대해 1과 자기 자신(N)을 제외한 약수들이 주어졌을 때, 어떤 수 N을 찾는 문제. N에대한 약수는 제곱수가 아니라면 짝수개의 순서쌍으로 주어질 것이다. 때문에 이 약수들 중에서 가장 작은 수와, 가장 큰 수를 곱하면 자연스럽게 N을 구할 수 있다. (제곱수이며 약수가 1개인 경우는 가장 작은수, 가장 큰 수가 같아짐) 나는 2가지 방법으로 풀어보았다. 첫번째 약수를 배열로 받아 오름차순 정렬한 후, 첫번째 인덱스와 마지막 인덱스를 곱함. // 해설참조 : sehyeok.tistory.com import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner..

[Java] 백준알고리즘 #11050 이항 계수 1

먼저 이항 계수가 무엇인지 알아보자. n과 k에 대해 nCk 즉 n개의 물건에서 k개를 고르는 경우의 수를 나타낸다. nCk에 대해서는 다음 글 참조 2021.03.26 - [Java/백준알고리즘] - [Java] 백준알고리즘 #1010 다리 놓기 [Java] 백준알고리즘 #1010 다리 놓기 서쪽의 사이트 n 개와 동쪽의 사이트 m개를 이을 다리를 놓을 때, 이 다리를 놓는 경우의 수를 구하는 문제이다. 구하는 방법은 간단하다. m개의 사이트에서 n개를 고르는 경우의 수는 m Combination n sehyeok.tistory.com nCk는 n x (n - 1) x (n - 2) x ... x (n - k) / k x (k - 1) x (k - 2) x ... x 1 로 나타낼 수 있다. 이를 코드..

[Java] 백준알고리즘 #24723 녹색거탑

탑을 내려오는 경우의 수를 찾는 문제. 블록은 인접한 아래층의 블록으로 내려오므로, 예제에서처럼 1층에서는 2개, 2층에서는 4개의 경우의 수가 발생한다. 3층의 경우를 보면 2층의 각 경우의 수마다 내려올 수 있는 선택지가 2개씩 늘어나므로 경우의 수는 8개가 된다. 1층은 2^1 2층은 2^2 3층은 2^3 ... 이 되는 것을 알 수 있다. 코드는 매우 간단하다. // 해설참조 : sehyeok.tistory.com import java.util.Scanner; public class Main { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); int n = sc.nextInt(..

[Java] 백준알고리즘 #15439 베라의 패션

N개 색상의 상의와 하의가 있을 때, 다른 색으로 조합하는 경우의 수를 찾는 문제. 10개가 있다고 가정하면 1번 상의는 1번 하의와 매칭할 수 없다(같은 색이므로) 즉 1번 상의와 매칭 가능한 하의의 수는 9개. 2번 상의도 마찬가지로 2번 하의를 제외한 나머지 하의와 매칭할 수 있으므로 경우의 수는 9. 3번 상의도 마찬가지로 3번 하의를 제외하므로 9개. ... 10번 상의는 10번 하의를 제외하므로 9개 이와같은 과정으로 볼 때 10개의 상의가 있다고 하면 각각이 9개의 하의와 매칭되므로 경우의 수는 10 x 9 가 되겠다. 이를 공식화하면 N개의 옷이 있다고 할 때, 조합하는 경우의 수는 N x (N - 1) 이 된다. // 해설참조 : sehyeok.tistory.com import java...

[Java] 백준알고리즘 #17103 골드바흐 파티션

어떤 짝수 n 을 두 소수의 합으로 나타낼 수 있는데, 이 두 소수의 순서쌍의 개수를 구하는 문제이다. 앞서 사용했었던 유클리드호제법을 이용해 소수를 도출해서 계산했더니 시간 초과 에러가 나왔다. 때문에 이번에는 에라토스테네스의 체를 이용해 소수를 도출해보았다. 2020.12.08 - [Java/백준알고리즘] - 백준알고리즘 #1929 소수 구하기 java (에라토스테네스의 체) 백준알고리즘 #1929 소수 구하기 java (에라토스테네스의 체) 보기에 간단해 보이는 문제이다. sosu()메소드를 만들어서 m부터 n까지의 소수를 차례대로 구하는 코드를 작성했으나 시간 초과로 실패 이러한 시간 초과 문제를 해결하기 위해서는 에라토스테네 sehyeok.tistory.com 보다 최적화된 에라토스테네스의 체 ..

[Java] 백준알고리즘 #13909 창문 닫기

첫번째 사람부터 n번째 사람까지 차례대로 창문을 열고 닫을 때, 마지막에 열려 있는 창문의 개수를 구하는 문제. 단순히 반복문을 사용해 1부터 n까지 차례대로 닫혀있다면(0이면) 1로, 열려있으면(1이면) 0으로 바꿔준 후 1인 개수를 체크하는 식으로 풀어보았다. // 해설참조 : sehyeok.tistory.com import java.util.Scanner; public class Main { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] ary = new int[n]; int count = 0; for (int i = 1; i

[Java] 백준알고리즘 #4134 다음 소수

입력받은 n 보다 크거나 같은 소수 중 가장 작은 소수를 출력하는 문제. 입력받은수가 소수인지 판별하기 위해 1부터 n 혹은 n/2 까지 반복하며 약수를 확인하다보면 시간 초과 오류가 발생한다. 이는 문제에 나온 힌트처럼 루트n 까지만 나눠서 확인하면 시간 효율을 높일 수 있다. 왜 그런지 확인해보자. 예를 들어 어떤 수 N이 소수가 아닌 합성수라고 한다면, N은 어떤 약수 a와 b를 이용해 a x b 로 나타낼 수 있다. 이 때, a가 b보다 크다고 하자. 그렇다면 "a x a 는 a x b 보다 크거나 같다" 라는 것을 알 수 있다. 한 예로 100인 경우, 10^2으로 나타낼 수 있고 100의 약수는 1,2,4,5,10,20,25,50이 있는데 2 x 50, 4 x 25, 5 x 20, 10 x 1..

[Java] 백준알고리즘 #2485 가로수

가로수를 같은 간격으로 심기 위한 최소수를 구하는 문제. 각 가로수 간격들의 최대공약수를 구하는 것으로 해결할 수 있어 보인다. 예제 1에서 간격들이 2 4 6이기 때문에 이들의 최대공약수는 2이고 1부터 13까지의 거리는 12이고, 이를 최대공약수로 나누면 6이 된다. 즉 1부터 13까지의 좌표 상에 총 7개 (시작점과 끝점)의 가로수가 있다고 볼 수 있다. 입력(가로수의 개수)는 4이므로 심어야하는 가로수의 최소수는 3이 되는 것이다. 조건에서 n은 3이상이고, 두 좌표 사이의 거리가 필요하기 때문에 처음 두 가로수의 좌표를 먼저 입력받는다. Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int first = sc.nextInt(); // 첫..

반응형