문제
해결 방안 고민
•
자동차 10부제와 관련된 문제이며 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 이것만 잘 이해하면 된다.
해결 방법
•
5가지 방법으로 풀어봤다.
◦
1번째 방법: BufferedReader
◦
2번째 방법: BufferedReader + BufferedWriter
◦
3번째 방법: Stack + if ~ else
◦
4번째 방법: Stack + if
◦
5번째 방법: List
코드
•
1번째 방법
package algo250316;
// 백준 - 10부제 (브론즈 4)
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back10797 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int day = Integer.parseInt(br.readLine()); // N 입력
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int answer = 0; // 일치하는 숫자 확인
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
// 숫자 일치 여부 확인
if (number == day) {
answer++;
}
}
System.out.println(answer);
}
}
Java
복사
•
2번째 방법
package algo250316;
// 백준 - 10부제 (브론즈 4)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Back10797_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int day = Integer.parseInt(br.readLine()); // N 입력
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int answer = 0; // 일치하는 숫자 확인
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
// 숫자 일치 여부 확인
if (number == day) {
answer++;
}
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
br.close();
}
}
Java
복사
•
3번째 방법
package algo250316;
import java.io.*;
import java.util.*;
public class Back10797_3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int day = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
stack.push(number);
if (stack.peek() == day) {
continue;
} else {
stack.pop();
}
}
System.out.println(stack.size());
}
}
Java
복사
•
4번째 방법
package algo250316;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Back10797_4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int day = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
stack.push(number);
if (stack.peek() != day) {
stack.pop();
}
}
System.out.println(stack.size());
}
}
Java
복사
•
5번째 방법
package algo250316;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Back10797_5 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Integer> list = new ArrayList<>();
int day = Integer.parseInt(br.readLine());
int answer = 0;
int idx = 0;
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
list.add(number);
if (list.get(idx) == day) {
answer++;
}
idx++;
}
System.out.println(answer);
}
}
Java
복사
속도
•
1번째, 3번째, 4번째 방법 > 2번째 방법 > 5번째 방법
•
참고로 3번째 방법에서 stack.size()가 아닌 변수를 지정하여 int size = stack.size()로 변경하여 출력을 하면 속도가 더 빨라지는 것을 확인할 수 있었다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int day = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 5; i++) {
int number = Integer.parseInt(st.nextToken());
stack.push(number);
if (stack.peek() == day) {
continue;
} else {
stack.pop();
}
}
int size = stack.size(); // 이렇게 하닌 속도가 더 빨라짐
System.out.println(size);
}
}
Java
복사