백준 자바
[백준/JAVA] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰
https://www.acmicpc.net/problem/3003 1. 문제 동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다. 체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다. 체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다. 동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오. 2. 문제 접근 1) 기존의 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 배열에 저장한다. 2) 동혁이가 찾은 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 입력받는다. 3)..
[백준/JAVA] 1427번 소트인사이드
숫자를 정렬하는 문제 https://www.acmicpc.net/problem/1427 1. 문제 배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 2. 문제 접근 1) 정렬하려는 수 N을 문자열로 입력받는다. 2) 숫자를 저장할 수 있는 10의 크기의 정수형 배열을 만든다. 3) 문자열의 문자 수만큼 반복하며 charAt()을 통해 각 문자를 접근하며 해당하는 숫자을 인덱스로 하여 배열의 값을 1씩 증가시킨다. 4) 배열을 인덱스 9부터 시작하여 0까지 해당 값이 0이 될때까지 인덱스값을 출력한다. 3. 코드 import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedR..
[백준/JAVA] 10989번 수 정렬하기3
수의 범위가 작다면 카운팅 정렬을 사용하여 더욱 빠르게 정렬할 수 있습니다. https://www.acmicpc.net/problem/10989 1. 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 수의 개수 N을 입력받는다. 2) N만큼 반복하면서 정수를 입력받고 이때 max 변수를 이용하여 입력받는 정수의 최대값을 저장한다. 입력받은 정수를 배열에 저장한다. 3) 카운팅 정렬을 이용하여 새로운 배열에 값들의 위치에 대한 index를 저장한다. 4) 새로운 배열을 이용하여 입력받은 정수를 출력한다. 카운팅 정렬 : 카운팅 정렬은 각 배열 원소끼리 직접 비교하는 것이 아닌, 인덱스를 갖고 위치를 찾아나가는 정렬 알고리즘. 3. 코드 import ja..
[백준/JAVA] 2751번 수 정렬하기2
시간 복잡도가 O(nlogn)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내장된 정렬 함수를 쓰는 것을 추천드립니다. https://www.acmicpc.net/problem/2751 1. 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 수의 개수 N을 입력받는다. 2) N만큼 반복하며 정수를 입력받고 이를 배열에 저장한다. 3) 배열에 저장된 수들을 병합정렬을 이용하여 오름차순으로 정렬한다. 4) 정렬된 배열을 출력한다. 병합정렬 리스트 길이가 0 또는 1이면 이미 정렬된 것으로 간주. 정렬 되지 않은 리스트는 절반으로 나누어 2개의 리스트로 분할한다. 각 부분 리스트를 ..
[백준/JAVA] 반복문을 사용하지 않는 2292번 벌집
벌집이 형성되는 규칙에 따라 벌집의 위치를 구하는 문제 https://www.acmicpc.net/problem/2292 1. 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 2. 문제 접근 입력의 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다..
[백준/JAVA] 2292번 벌집
벌집이 형성되는 규칙에 따라 벌집의 위치를 구하는 문제 https://www.acmicpc.net/problem/2292 1. 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 2. 문제 접근 1) 정수 N을 입력받는다. 2) N에서 1을 빼고 조건에 맞을 때까지 반복문을 진행하며 지나가는 방의 개수를 1씩 늘린다. 핵심! N에서 1을 뺐을 경우 첫째 ..
[백준/JAVA] 9020번 골드바흐의 추측
소수 응용 문제 2 https://www.acmicpc.net/problem/9020 1. 문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. ..
[백준/JAVA] 11653번 소인수분해
N을 소인수분해하는 문제 https://www.acmicpc.net/problem/11653 1. 문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. 2. 문제 접근 1) 정수 N을 입력받는다. 2) StringBuilder에 가장 작은 소수부터 시작하여 소인수들을 append한다. 소수가 아닌 것들은 그것보다 작은 소수에 의해서 이미 나누어지기 때문에 자동적으로 반복문에서 통과된다. 3. 코드 import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; public class Main { public static void main(String[] args) throws IOExcep..