[알고리즘] 백준 3052나머지

위의 문제를 풀기 위해 나머지를 배열에 담는 것까지는 성공 했지만, 서로 다른 수의 개수가 몇개 인지 구하는 방법을 잘 모르겠다.

입력한 10개의 값을 42로 나눈 나머지를 구하는 코드를 보면

문제는 remainder 배열에 담긴 값들을 중복된 값을 count하지 않고 값을 구할 수 있느냐 이다.

위와 같은 고민을 1시간 넘게 고민하고, 생각하려고 했으나 생각이 나지 않아 블로그들을 참고하게 되었고, 그를 바탕으로 정리해 보려고 한다.

import java.util.Scanner;
public class Baekjoon_3052{
	public static void main(String[] args) {
    
    Scanner scan = new Scanner(System.in);
    // Scanner를 이용해 입력 받는 객체 생성
    int arr[] = new int[10];
    int remainder[] = new int[10];
    // 입력받은 숫자를 저장할 배열, 나머지 배열생성
    for(int i=0;i<10;i++){
    	arr[i] = scan.nextInt();
        remainder[i] = arr[i]%42;
    }
    // 반복문을 이용해 입력받은 숫자, 나머지 배열에 담기
    
    //중복을 포함하지 않고 나머지개수 count하기!
   for(int j=0;i<remainder.length;j++){
  		boolean b = false;
        for(int k=j+1;k<remainder.length;k++){
        if(remainder[i] == remainder[k]){
        	b = true;
            break;
        }
  }
 // boolean의 기본값을 false로 지정한 후,
 // 2중 for문을 이용해 
 //remainder[0] == remainder[1],[2],...,[9]
 //remainder[1] == remainder[2],[3],...,[9]
 ...
 //remainder[8] == remainder[9] 까지 remainder의 값을 모두 비교할 수 있는 코드
 // 중간에 같은 값이 나온다면  
 
  if(b == false)
  		count++;
    }
    
    System.out.println(count);
    
    
    }
}

위 코드는 직관적이고, 내가 이해할 수 있는 코드였다.

https://st-lab.tistory.com/46
위 블로그를 통해 문제풀이를 봤는데, 코드의 양의 차이가 많이나고 깔끔해 보여서 정리해본다.
1. HashSet을 이용하는 방법

import java.util.Scanner;
import java.util.HashSet;
 
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		HashSet<Integer> h = new HashSet<Integer>();
 
		for (int i = 0; i < 10; i++) {
			h.add(in.nextInt() % 42);
		//입력받은 값의 나머지 값을 add메소드를 통해 HashSet에 저장
		}
        
		in.close();
		System.out.print(h.size());
	}
}
  1. Scanner 대신 BufferedReader를 이용한 방법
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
    public static void main(String[] args) throws IOException {
 
        boolean[] arr = new boolean[42];
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        for(int i = 0 ; i < 10 ; i++) {
            arr[Integer.parseInt(br.readLine()) % 42] = true;
        }
        
        int count = 0;
        for(boolean value : arr) {
            if(value){    // value 가 true 라면
                count++;
            }
        }
        System.out.println(count);
    }
}

아직 자료구조를 공부하지 않았기 때문에 위와 같은 방법도 있다는 정도만 알게 된 것 같다.

시간이 지난 뒤에 목표가 생겼다.
1. HashMap에 대해 공부할 것
2. Scanner대신 BufferedReader를 사용해볼 것

좋은 웹페이지 즐겨찾기