[アルゴリズム]白駿3052余剰



上記の問題を解決するために、残りを1つの配列に入れることは成功したが、異なる数の個数をどのように求めるか分からない.
コードが表示されると、入力した10個の値を42で割って残りの値を求めます.

問題は,繰返し値を計算せずに残りの配列の値を評価できるかどうかである.
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());
	}
}
  • 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を使用