[알고리즘] 백준 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());
}
}
- 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를 사용해볼 것
Author And Source
이 문제에 관하여([알고리즘] 백준 3052나머지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hoha/백준-3052-나머지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)