본문 바로가기

Programming/알고리즘

(33)
[백준] 11654 - 아스키 코드- JAVA[자바] 매우 쉬운 문제이지만, 주의할 점은 "출력하는 값이 주어진 입력에 대한 아스키 코드 값" 이라는 것이다. public class Main { public static void main(String[] args) throws Exception { int a = System.in.read(); System.out.print(a); } } System.in은 가장 기초적인 입력방법이다. System.in은 byte값으로 문자 한 개를 읽어서 해당 문자에 대응되는 아스키 코드 값을 저장할 수 있다. 그리고 반드시 주의해야 할 점은 예외처리를 해주어야한다. IOException (java.io 패키지를 import 해야함) 로 메인 옆에 써주어도 되고, 그냥 Exception 으로 처리해도 된다.
[백준] 1065 -JAVA[자바] 예제 입력 1, 2에서 볼 수 있듯 100미만의 수는 그 자체로 한수이다. 숫자가 1자리, 2자리는 그 자체로 등차수열이라고 할 수 있다. 결국 경우의 수를 따져봐야 하는 것은 100-1000의 숫자이다. 즉, 3자리의 숫자에 대한 한수 여부를 확인하면 되므로 (1000은 한수가 아니다) 백의 자리 숫자 : N / 100 십의 자리 숫자 : (N/10) % 10 일의 자리 숫자: N % 10 이고, 등차 수열의 경우 백의 자리 숫자를 X, 등차를 a라고 하면 백의 자리 숫자: X 십의 자리 숫자: X+a 일의 자리 숫자: X+2a이므로 (십의자리 숫자) *2 = (백의 자리 숫자) + (일의 자리 숫자) 의 관계를 갖고있다. 이를 식으로 표현하면, ((N/10) % 10) *2 = (N/100) + (N..
[백준] 4673 - JAVA[자바] 10000보다 작거나 같은 셀프 넘버를 구해야 하므로, 1부터 10000까지 for문을 돌리며 셀프넘버를 찾는다 우선, 반복되는 작업은 함수로 꺼내주는게 깔끔하고, 관리가 편하겠다 public static int cnst(int number){ int sum = number; //각 자리수를 더해주는 로직 while(number!=0){ sum += number%10; number = number/10; } return sum; } number: 생성자 역할 만약 number가 1234라면 number%10 = 4 number/10 = 123 -> while문을 한번 돌면 num=123과 sum 에는 맨 마지막 자리수를 더한 1237이 나오고, 두번 돌면 num =12와 sum=1237+3 = 1240 ..
[백준] 4344 - 평균은 넘겠지 - JAVA[자바] 관건은 반올림후, 소수점 셋째자리까지 출력하는 부분이겠다. 1. 테스트 케이스의 갯수를 가져온다. int C = Integer.parseInt(br.readLine()); 2. 한 줄을 불러와서 총점을 구해서 평균을 구할 준비를 한다. 학생 비율을 소수점 셋째자리까지 구해야하기 때문에 변수중 하나를 double로 설정하면 된다. for(int i = 0; i (sum/N)){ over++; } } System.out.printf("%.3f%%\n", (over/N)*100); 기본 출력문은 println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 반면에 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다. printf(..
[백준] 8958 - OX퀴즈 - JAVA[자바] import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); String arr[] = new String[N]; for (int i = 0; i < N; i++){ arr[i] = br.readLine(); } for (int i = 0; i < N; i++)..
[백준] 1546 - 평균 - JAVA[자바] 문제의 조건 중 눈여겨 봐야할 것은 "실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다." 는 것이다. 처음 제출했을때 틀린코드는 아래와 같다. import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt..
[백준] 3052 - 나머지 - JAVA[자바] 2가지 풀이법이 있다. 1. 배열을 이용한 방법 2. HashSet을 이용한 방법 배열을 이용한 방법을 먼저 살펴보면, 1. 불린으로 된 배열을 먼저 만들어주고, boolean[] arr = new boolean[42]; 2. 입력된 10개의 수를 대상으로 42로 나눈 나머지에 해당하는 배열의 위치를 true로 바꾸어준다. for(int i = 0; i < 10; i++){ arr[Integer.parseInt(br.readLine()) % 42] = true; } 3. arr의 boolean 값들을 for문에서 value로 받고, value==true이면 cnt를 1 올려준다. int cnt = 0; for(boolean value : arr){ if(value){ cnt++; } } System.ou..
[백준] 5597 - 과제 안 내신 분..? - JAVA[자바] 배열 두개를 비교하여 참/거짓을 가려내면 된다고 생각했으나, 배열 하나로 완료할 수 있는 과정이었다. import java.io.InputStreamReader; import java.io.IOException; import java.io.BufferedReader; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] attended = new int[28]; int[] student = new int[31]; for(int i = 0; i