목록알고리즘 (27)
지극히 개인적인 개발블로그
리모컨 성공분류 시간 제한메모리 제한제출정답맞은 사람정답 비율 2 초 256 MB 34106 7815 5350 22.252% 문제 수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다. 리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다. 수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오. 수빈이가 지금 보고 있는 채널은 100번이다...
풀이: 완전 탐색이라고 하지만 1부터 증가하여 찾는다면 제한시간에 걸릴 것이 분명하다. 일정 규칙내에서 재귀함수를 이용하여 풀어줬다 0으로 시작하는 감소수(사실 0 하나) 1로 시작하는 감소수 ex)10 2로 시작하는 감소수 ex)20, 21, 210 package Baekjoon; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main_1038 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); // 범위 내 최대 감소수는 987654321 in..
문제 풀이: 매번 느끼는거지만 동적계획법은 종이에 직접 적어가면서 규칙을 찾아가는 것이 중요하다고 생각합니다. 이 문제 또한 그렇게 풀다보면 규칙이 나오고 답을 쉽게 구할 수 있습니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Sol_1904 { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buffered..
문제 풀이: 배울 점이 많은 좋은 문제라고 생각합니다. 중복을 알아서 제거해주는 set이라는 자료구조와 Compare오버로딩 함수가 매우 유용했습니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Sol_1181 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); H..
문제 풀이: c++에선 벡터를 많이 썻다면 자바에서는 ArrayList를 많이 쓴느 것 같네요. 그 사용방법을 한번 익혀봤습니다. import java.util.*; public class Sol_2750 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList list = new ArrayList(); for(int i=0; i
풀이: 복잡하게 생각할거 없이 숫자를 가장 작은 종말수인 666부터 시작해서 1씩 증가시키면 됩니다. 그러면 자연스럽게 1666, 2666, 3666, 46666, 5666, 6661, 6662... 순서대로 종말수를 찾을수 있게 됩니다. import java.util.Scanner; public class Sol_1436 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num=666; while(n > 0){ num++; String str = Integer.toString(num); if(str.contains("666")) n--; } System.out.pr..