백준 3052번 자바
https://www.acmicpc.net/problem/3052
알고리즘
첫째 줄부터 열번째 줄까지 정수가 주어진다. ( 0<= 정수 <= 1000 )
각 정수들을 42로 나누었을때, 서로 다른 나머지가 몇 개 있는지 출력한다.
정수 % 42를 구하면 제일 높은 숫자가 41이다. 그러므로 42길이 boolean 배열을 만든다.
정수 % 42를 해서 나오는 값을 인덱스로 해서 true로 바꿔준다.
그 후 true인 것을 숫자로 세서 출력하면 될 듯 하다.
1. boolean[42]를 만든다.
2. 10번 반복문을 돌린다.
2-1. boolean[입력받은 정수 % 42] = true;
3. int count = 0 을 만든다.
4. boolean[] 길이만큼 반복문을 돌린다.
4-1. true인 값이 나온다면 count를 +1을 해준다.
5. count를 출력한다.
풀이1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No_3052 {
public static void main(String[] args) throws IOException {
boolean[] arr = new boolean[42];
int count = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
arr[Integer.parseInt(br.readLine()) % 42] = true;
}
for (boolean v : arr) {
if(v) count++;
}
System.out.println(count);
}
}
알고리즘대로 썼다.
BufferedReader는 String으로 받기때문에 Integer.parseInt()를 통해 int형으로 바꿔준 것이다.
2번째 for문은 for-each문이라고 arr 값만큼 반복해서 v에 값을 넣어준다.
for ( int i = 0; i < arr.length; i++) {
boolean v = arr[i];
if(v) count++;
}
풀어서 쓰면 위같은 느낌이다.
풀이2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No_3052 {
public static void main(String[] args) throws IOException {
boolean[] arr = new boolean[42];
int count = 0;
int num;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
num = Integer.parseInt(br.readLine()) % 42;
if (!arr[num]) {
arr[num] = true;
count++;
}
}
System.out.println(count);
}
}
이번에는 for문을 2번돌리는 것보다는 한번에 돌려서 확인하는 방법이다.
10번 반복문을 돌리는데 int num에다가 나머지 값을 대입하고,
arr[num]이 false면 true로 바꾸고 count++ 해준다.
풀이3
정수 10개의 나머지 값들을 받아서 비교하는 식으로 해보면 어떨까??
이것들을 저장할 int배열을 만들어서 넣은 후 하나씩 꺼내서 서로 비교하는 풀이법을 만들어보자.
그런데 무작위로 값이 들어가니까 Arrays.sort()로 정렬을 해서 앞뒤로 비교하면 되겠다.
이렇게 쓰다보니 나머지 값들을 중복값이 생성안되는 Set에다가 넣어보는것도 괜찮을 것 같다.
(컬렉션 중 단일 값으로 쓰는 List, Queue, Set 중에서 중복과 순서가 없는것이 Set이니까)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class No_3052 {
public static void main(String[] args) throws IOException {
int[] arr = new int[10];
int count = 1;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
arr[i] = Integer.parseInt(br.readLine()) % 42;
}
Arrays.sort(arr);
int copy = arr[0];
for (int i = 1; i < 10; i++) {
if (copy != arr[i]) {
count++;
}
copy = arr[i];
}
System.out.println(count);
}
}
풀이4
풀이3번을 쓰면서 생각했던 Set을 써보자.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class No_3052 {
public static void main(String[] args) throws IOException {
HashSet<Integer> arr = new HashSet<Integer>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
arr.add(Integer.parseInt(br.readLine()) % 42);
}
System.out.println(arr.size());
}
}
HashSet은 Set을 구현한 클래스라서 add를 하면 중복값이 들어가지 않는다.
그래서 arr.size()로 크기를 출력하면 된다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 8958번 - Java(자바) (0) | 2022.01.28 |
---|---|
[백준] 1546번 - Java(자바) (0) | 2022.01.27 |
[백준] 2577번 - Java(자바) (0) | 2022.01.23 |
[백준] 2562번 - Java(자바) (0) | 2022.01.18 |
[백준] 10818번 - Java(자바) (0) | 2022.01.14 |