본문 바로가기

ALGORITHM

(212)
백준 9095 1, 2, 3 더하기 (Java) 1. 문제 링크 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 n은 최대 10이다. 근데 4를 만들때 쓴 녀석들에 1씩을 더하면 5를 만들 수 있다. 그니까 각자 만든거에 1을 더한 경우들을 더하고 각 숫자만 넣으면 되는것 같다. 1은 1 (1개) 2는 11 2 (2개) 3은 111 21 12 3 (4개) 4는 1/111 1/21 1/12 1/3 111/1(중복) 21/1 12/1(중복) 3/1 11/2(중복) 2/11(1과 3의 경우, 2끼리 경우의 합) => 4는 1111 112 121 211 22 13 31 (7개) 1 2 4 5는 1과 4, 2와 3 1 다음..
백준 17478 재귀함수가 뭔가요? (Java) 1. 문제 링크 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 문제 이름 그대로 재귀를 활용해서 문제를 풀었다. 4. 코드 import java.util.Scanner; public class Main { static int N; static StringBuilder sb; private static void again(int i) { String str = "____"; if(i>0) { for(int a=0;a
백준 1476 날짜 계산 (Java) 1. 문제 링크 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 반복문을 돌면서 연도와 E, S, M 전부 1씩 플러스한다. E가 16, S가 29, M이 20이 되면 끝이다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br =..
백준 3085 사탕 게임 (Java) 1. 문제 링크 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 인접한 사탕이 다른 색일 경우 바꾸면서 최댓값을 찾는다. 사방탐색을 하려고 했는데 교환이라서 오른쪽과 아래쪽만 확인해도 전부 볼 수 있다. 교환 전 후로 값을 바꿔주는 과정을 넣어서 원래 배열을 유지하게 했다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private static int N; private static int max = 0; public static void main(String[] arg..
백준 1107 리모컨 (Java) 1. 문제 링크 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 고장난 버튼을 boolean[] 배열에 담았다. 채널 변경은 +/- 버튼과 숫자 버튼을 이용해 이동할 수 있다. 고장나지 않은 버튼을 모두 눌러보면서 완전탐색을 진행했다. 채널 이동 범위를 설정하지 않으면 stackoverflow가 발생해서 추가했고 재귀 전에 검사하도록 해서 시간이 조금 많이 줄어들었다. 4. 코드 import java.io.BufferedReader; import jav..
백준 7785 회사에 있는 사람 (Java) 1. 문제 링크 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 간단하게 생각해서 enter가 들어오면 추가하고 leave가 들어오면 삭제하면 된다. 동명이인이 없다는 조건이 있어서 HashSet을 사용해봤다. 마지막에는 정렬을 위해 HashSet을 List로 변환했고 사전의 역순으로 출력하면 끝이다. Collections.reverse()로 했다가 2%? 4%?에서 틀렸습니다가 나왔고, 알고보니 그냥 리스트를 역으로 출력했던 거..
백준 9093 단어 뒤집기 (Java) 1. 문제 링크 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 문장을 공백 기준으로 split하여 단어를 배열에 저장한다. 그 안에서 반복문을 돌려도 결과는 나올 것 같지만 StringBuilder의 reverse를 활용해 문자열을 역으로 출력하게 했다. new StringBuilder(문자열).reverse().toString()을 사용하면 이런 문제를 쉽게 풀 수 있다. 4. 코드 import java.io.BufferedReader; import java..
백준 2609 최대공약수와 최소공배수 (Java) 1. 문제 링크 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 최대공약수는 유클리드 호제법을 이용하면 된다. 큰 수 A, 작은 수 B의 경우, B와 A%B 값을 재귀함수로 돌리면 A%B가 0이 되는 순간의 B가 최대공약수이다. 또한 A x B = 최대공약수 x 최소공배수라서 최소공배수는 A * B / 최대공약수로 구할 수 있다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(S..