내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 재수강할 과목의 과목 코드가 주어진다.
두 번째 줄에 수강 신청 가능한 과목의 개수 N이 주어진다. (1 ≤ N ≤ 16)
그다음 N개의 줄에 걸쳐 수강 신청 가능한 과목의 과목 코드가 주어진다.
입력되는 과목 코드는 서로 다르다.
재수강으로 인정되는 과목의 개수를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));:
BufferedReader 객체를 생성한다.
InputStreamReader는 바이트 단위의 System.in을 문자 단위로 읽을 수 있도록 변환해주고, BufferedReader는 이를 버퍼링하여 읽기 성능을 향상시킨다.
String targetCourseCode = br.readLine();:
첫 번째 줄에서 재수강할 과목 코드를 문자열(String) 형태로 읽어와 targetCourseCode 변수에 저장한다.
readLine()은 한 줄 전체를 읽어온다.
String targetPrefix = targetCourseCode.substring(0, 5);:
substring() 메서드는 문자열의 특정 부분을 추출하다.
targetCourseCode.substring(0, 5)는 targetCourseCode 문자열의 인덱스 0부터 4까지 (총 5개 문자)를 추출하여 targetPrefix 변수에 저장한다. (Java에서 substring(startIndex, endIndex)는 startIndex부터 endIndex-1까지를 의미한다.)
이것이 바로 우리가 찾던 '앞 5자리'이다.
int N = Integer.parseInt(br.readLine());:
두 번째 줄에서 수강 신청 가능한 과목의 개수 N을 읽어온다.
br.readLine()으로 읽어온 값은 문자열이므로, Integer.parseInt() 메서드를 사용하여 정수형(int)으로 변환한다.
int recognizedCount = 0;:
재수강으로 인정되는 과목의 개수를 세기 위한 정수형 변수 recognizedCount를 선언하고 0으로 초기화한다.
for (int i = 0; i < N; i++) { ... }:
이제 N개의 수강 신청 가능한 과목 코드를 하나씩 처리하기 위해 for 반복문을 사용한다.
i는 0부터 N−1까지 반복되어 총 N번 실행된다.
String availableCourseCode = br.readLine();:
반복문 내에서 각 줄마다 수강 신청 가능한 과목 코드를 읽어와 availableCourseCode 변수에 저장한다.
String availablePrefix = availableCourseCode.substring(0, 5);:
targetCourseCode에서 했던 것과 동일하게, 현재 읽어온 availableCourseCode의 앞 5자리를 추출하여 availablePrefix 변수에 저장한다.
if (targetPrefix.equals(availablePrefix)) { ... }:
두 개의 문자열 targetPrefix와 availablePrefix가 같은지 비교한다.
주의: 자바에서 문자열을 비교할 때는 == 연산자 대신 equals() 메서드를 사용해야 한다.
==는 두 변수가 같은 객체를 참조하는지(메모리 주소가 같은지) 비교하고, equals()는 두 문자열의 내용이 같은지 비교한다.
만약 두 과목의 앞 5자리가 일치하면 조건문 내부의 코드가 실행된다.
recognizedCount++;:
앞 5자리가 일치하여 재수강이 인정되는 과목이 발견되었으므로, recognizedCount 변수의 값을 1 증가시킨다.
System.out.println(recognizedCount);:
모든 N개의 과목 코드를 확인한 후, 최종적으로 recognizedCount에 저장된 값을 출력한다.
이것이 문제에서 요구하는 답이다.
br.close();: BufferedReader를 닫아 자원을 해제한다.
코드로 구현
package baekjoon.baekjoon_30;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 31822번 문제
public class Main1152 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. 재수강할 과목의 과목 코드를 입력받습니다.
String targetCourseCode = br.readLine();
// 2. 재수강할 과목 코드의 앞 5자리를 추출합니다.
String targetPrefix = targetCourseCode.substring(0, 5);
// 3. 수강 신청 가능한 과목의 개수 N을 입력받습니다.
int N = Integer.parseInt(br.readLine());
int recognizedCount = 0; // 재수강으로 인정되는 과목의 개수를 세는 변수
// 4. N개의 수강 신청 가능한 과목 코드들을 입력받으며 비교합니다.
for(int i = 0; i < N; i++) {
String availableCourseCode = br.readLine();
// 각 수강 신청 가능한 과목 코드의 앞 5자리를 추출합니다.
String availablePrefix = availableCourseCode.substring(0, 5);
// 5. 재수강 과목의 앞 5자리와 현재 확인하는 과목의 앞 5자리가 일치하는지 확인합니다.
if(targetPrefix.equals(availablePrefix)) {
recognizedCount++; // 일치하면 카운트를 증가시킵니다.
}
}
// 6. 최종 재수강 인정 과목의 개수를 출력합니다.
System.out.println(recognizedCount);
br.close(); // BufferedReader를 닫아 자원을 해제합니다.
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.