Codingtest

[코딩테스트] 백준 5597번 과제 안 내신 분 ..? 해설집 (Java)

AlexHouse 2022. 10. 29. 01:29
728x90

무려 3일끝에

 

왜 안되는가에 대한 해답을 찾았다.

 

문제를 잘 읽어야 된다.

굳이 15명만 제출할 필요도 없다 

 

여기서는

2번 과 8번이 제출하지 않으면 되는

정답을 제출해주면 된다.

 

 

 

그리고 int 배열 안에는

 

default로 0 값이 들어간다.


문제

 

 

정답

 

스캐너  사용

 

package codingTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class codingTest_5597 {
    
    public static void main(String[] args) throws IOException { // Null 예외 처리
        
    	Scanner in = new Scanner(System.in); // 스캐너 처리
    	
    	int[] arr = new int[31]; // 배열 31개 자리까지
    	
    	int A; // 변수 A 선언
    	
    	for(int i=1; i<29; i++) { // i가 29 전까지 반복 
    		A = in.nextInt(); //  A을 값 받음
    		arr[A] = 1;  // arr[낸사람번호] = 1 로 함
    	}
    	
    	for(int i=1; i<arr.length; i++) { // i 가 arr[낸사람 수] 만큼 반복함
    		if(arr[i] != 1) { // 만약 arr[낸사람이 번호가] = 1 아니면 안낸사람임
    			System.out.println(i); // 안냈을 때 번호를 출력함
    		}
    	}
    	in.close(); // 스캐너 종료
    	
    }
}

 

 

어떤 분의 스캐너로 정답을 참고 하였는데,

 

주석으로 코드리뷰 해놓았다.

 

 

 

버퍼 사용

 

 

 

package codingTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    
    public static void main(String[] args) throws IOException { // Null 예외 처리
        
    	
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 버퍼 선언
    	
    	boolean[] arr = new boolean[31]; // 0번은 없으니까 1~30번까지 있으려면 공간이 31 개 필요함
    	
    	for(int i=0; i<28; i++) { // 변수 i 는 0~28번 미만이므로 총 28번을 반복함. 그럼 2개 호출가능
    		StringTokenizer st = new StringTokenizer(br.readLine(), " "); // 개행 및 " " 마다나눔
    		int A = Integer.parseInt(st.nextToken()); // 변수 A에 계속 학생번호를 받음   	 	
	    	arr[A] = true; // arr[학생번호]를 true로 넣어줌
    	}
    	
    	for(int i=1; i<arr.length; i++) { // i가 1부터인 이유는 0번 학생은 없음
    		if(arr[i] != true) { // arr[학생 번호] 가 true가 아니면 과제 안한 학생임
    			System.out.println(i); // 과제 안한 학생의 번호를 호출
    		}

    	}
    	br.close(); // 버퍼종료
    	
    }
}

booleandefault 값이 false로 들어가있다.

 

 

버퍼 사용 2

package codingTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    
    public static void main(String[] args) throws IOException { // Null 예외 처리
        
    	
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 버퍼 선언
    	
    	int[] arr = new int[31]; // 0번은 없으니까 1~30번까지 있으려면 공간이 31 개 필요함
    	
    	for(int i=0; i<28; i++) { // 변수 i 는 0~28번 미만이므로 총 28번을 반복함. 그럼 2개 호출가능
    		StringTokenizer st = new StringTokenizer(br.readLine(), " "); // 개행 및 " " 마다나눔
    		int A = Integer.parseInt(st.nextToken()); // 변수 A에 계속 학생번호를 받음   	 	
	    	arr[A] = 1; // arr[학생번호]를 1  넣어줌
    	}
    	
    	for(int i=1; i<arr.length; i++) { // i가 1부터인 이유는 0번 학생은 없음
    		if(arr[i] != 1) { // arr[학생 번호] 가 1  아니면 과제 안한 학생임
    			System.out.println(i); // 과제 안한 학생의 번호를 호출
    		}

    	}
    	br.close(); // 버퍼종료
    	
    }
}

 

int를 사용하였다.

 

int 배열은 디폴트 0 이 들어가있다.

 

 

 

버퍼의 경우에는 하나라도 값을 안넣어주게 되면 

 

NosuchElementException 에러를 내보낸다.

 

과제를 제출 한 사람 3명일 경우에는

 

나머지 번호가 공백이 될 것이기 때문에 

 

계속 해서 저런 에러를 보낼 것이다.

 

 

계속 이런식으로 런타임 에러를 보내기 때문이다.

 


 

To be continue..

728x90