https://www.acmicpc.net/problem/3052
백준 3052 번 나머지의 개수 구하기 문제이다
10개의 수를 입력받은 뒤 서로다른 나머지의 개수를 출력하는 문제이다
두가지 방법을 이용해서 푼다
첫번째는 boolean 배열을 이용한 방법이다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main{
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
boolean check [] = new boolean [42];
int n;
int count = 0;
for(int i=0; i<10; i++) {
n = Integer.parseInt(br.readLine());
check[n % 42] = true;
}
for(boolean value : check) {
if(value)
count++;
}
bw.write(count + "");
br.close();
bw.flush();
bw.close();
}
}
입력받은 값을 42로 나눈 나머지값의 최대치는 42니까 boolean 배열의 값을 42로 만들어준다
첫번째 for 문에서는 10개의 수를 입력받고 해당되는 boolean 배열의 값에 true 로 변환해준다
(값이 중복되더라도 같이 true로 되기때문에
두번째 for 문에서는 true로 변환된 값의 개수를 카운트해준다
개수가 세어진 count 를 출력해주면 끝이다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main{
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
boolean check [] = new boolean [42];
int n;
int count = 0;
for(int i=0; i<10; i++) {
n = Integer.parseInt(br.readLine());
if(!check[n % 42]) {
count++;
}
check[n % 42] = true;
}
bw.write(count + "");
br.close();
bw.flush();
bw.close();
}
}
for 문을 이렇게 고칠수도 있다 시간은 이쪽이 더 빠르다
10번 입력을 받아야하니 반복을 10번으로 해놓은 뒤 입력을 받는다
boolean 의 초기값은 false 이다 입력받은값을 42로 나눈 나머지를 ! 연산자로 true 로 바꾼뒤 if 문에서 count를 해준다
그다음 중복되는 수가 나왔을때 다시 count 가 안되게 그 값을 true 로 설정해준다
두번째는 HashSet 을 이용한 방법이다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
public class Main{
public static void main(String[]args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
HashSet<Integer> h = new HashSet<Integer>();
for(int i = 0; i < 10; i++) {
h.add(Integer.parseInt(br.readLine()) % 42);
}
bw.write(h.size()+ "\n");
br.close();
bw.flush();
bw.close();
}
}
HashSet 이란 중복되는 원소를 넣을경우 하나만 저장한다
먼저 HashSet 을 사용해주기 위해 java.util.HashSet 을 import 해준다
사용하는 방법은 간단한데 HashSet<Integer> h = new HashSet<Integer>();
int 형식에 h 라는 이름으로 선언을 해준다
그다음 h.add 를 사용해서 값을 입력받아준다
위에서 설명한대로 중복되는 값은 허용하지않고 입력이 들어간다
h.size() 로 출력을해준다 h.size 는 HashSet 의 크기를 반환해준다 (저장된 원소의 개수)
이 방법은 1번 방법과 소요시간은 같다
빠른 순서 2 (124ms) - 1 (140ms) 3 (140ms)
'Java > 백준' 카테고리의 다른 글
Python / 1654 랜선 자르기 (0) | 2023.01.11 |
---|---|
Python / 1010 다리놓기 (0) | 2023.01.07 |
Python / 11866 요세푸스문제 (0) | 2023.01.06 |
Python / 10866 덱 (0) | 2023.01.06 |
백준 / 1330 두 수 비교하기 (0) | 2022.05.05 |