배열 문제 너무 어렵다

리진아·약 14시간 전
0

백준 풀이

목록 보기
3/3
post-thumbnail

오늘은 시간이 없어서 문제를 많이 풀지 못했다.

거기다 수요일이라 5시에 퇴근해서

퇴근하기 전 벨로그에 정리한다.




5597 과제 안 내신 분


문제
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

입력
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.

출력
출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.

예제 입력
3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

예제 출력
2
8



class Main {
	public static void main (String[] args) throws java.lang.Exception {
	    Scanner in = new Scanner(System.in);
	    int [] students = new int [28];
	    int [] all_students = new int [30];
	    
        //<1>
	    for(int j =0; j<30; j++){
	        all_students[j] = j+1;
	    }
	    
	    
	    for(int i =0; i<28; i++){
	        int number_i = in.nextInt(); //<2>
    	    
    	    students[i] = number_i;
	        
            //<3>
	        for(int k=0; k<30; k++){
	            if(all_students[k] == students[i]){
	                all_students[k]=0;
	            }
	        }
	        
	    }
	    
        //<4>
	    for(int a=0; a<all_students.length; a++){
	        if(all_students[a] !=0){ //<5>
	            System.out.println(all_students[a]);
	        }
	    }
	    
	    
	}
}

<1> 먼저 1번부터 30번까지 숫자를 all_students에 담는다.

<2> 입력받은 28개의 숫자를 students에 담는다.

<3> students와 all_students를 비교하며 같은 숫자는 all_students에서 0으로 바꾼다.

<4> all_students를 순회하며

<5> 0인 값을 제외하고 출력한다.



3052 나머지


문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

예제 입력
39
40
41
42
43
44
82
83
84
85

예제 출력
6


class Main {
	public static void main (String[] args) throws java.lang.Exception {
	    Scanner in = new Scanner(System.in);
	    int [] numbers = new int [10];
	    
        //입력받는 10개의 수를 42로 나눈 나머지로 numbers 배열에 넣음
	    for(int j =0; j<10; j++){ 
	        int num_j = in.nextInt() % 42;
	        numbers[j] = num_j;
	    }
	    
	    int[] result = Arrays.stream(numbers)
                .distinct() // 중복된 값 제거
                .toArray(); // 다시 배열로 변환

        System.out.println(result.length);
	    
	}
}

이 문제를 푸는데 시간이 오래걸렸다.

왜냐하면 numbers 배열을 순회하면서 for문으로 같은 값이 있을 경우 cnt변수에 +1을 하는 쪽으로 생각했었다.
그런데 도저히 답이 나오지 않아서 그냥 서칭했다..

중복값을 제거하는 코드를 찾고 result라는 배열을 새로 만든 다음
length함수로 크기를 찾아내는 방법으로 해결했다...



내가 풀었다고는 할 수 없지만 ㅜ
그렇다고 계속 머리 꽁꽁 싸맬 수는 없었다..


profile
알맹이가 가득 찬 개발자가 되기 위해 한 걸음 더 다가가는,

0개의 댓글