Backend
home
🚗

[백준] 10부제

생성일
2025/03/16 05:59
태그
BaekJoon
게시일
2025/03/16
최종 편집 일시
2025/03/16 06:09

문제

해결 방안 고민

자동차 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
복사