
안녕하세요, 성조입니다.
이번 포스팅은 자바 11버전으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/1032
1032번: 명령 프롬프트
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은
www.acmicpc.net
문제
시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.
dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.
이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.
입력
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.
출력
첫째 줄에 패턴을 출력하면 된다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
char text[] = br.readLine().toCharArray();
for (int i=0; i<testCase-1; i++) {
char compare[] = br.readLine().toCharArray();
for(int j=0; j<text.length; j++) {
if(text[j] != compare[j]) {
text[j] = '?';
}
}
}
System.out.print(text);
}catch(IOException e) {
System.out.println("error");
}
}
}
풀이
이 문제의 지문을 읽고 이해할 때 와일드카드라는 개념을 이해하면 풀이하기 더 좋다.
자바에서 와일드 카드는 두 가지가 존재하며, *(애스터리스크)는 길이가 0이상인 임의의 문자열에, ?는 임의의 한 문자에 대응한다.
1) 'abc*'는 abc, abcd, abca, abcdd등 abc 이후에 오는 모든 문자 또는 문자열을 가져올 수 있다.
2) 'abc?'는 abcd, abcc, abca 등 abc 이후에 어떤 문자든 한 문자만 가져올 수 있다.
다시 풀이로 접근한다.
문제에서 주어진 내용을 모두 이해하면 [반복 횟수, 기준 문자열, 기준 문자열과 다른 문자를 ?로 변경] 요약할 수 있다.
예제 입력을 참고한다.

예제를 보면 Input 값으로 [3, config.sys, config.inf, configures]를 입력 받는다. output 값으로는 config????가 있다.
입력에 주어진 조건인 첫째 줄에 내용을 확인한다.
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다.
코드별로 정리하면 다음과 같다.
- 반복할 횟수
int testCase = Integer.parseInt(br.readLine());
- 기준 문자열
char text[] = br.readLine().toCharArray();
- 기준 문자열과 비교해서 바꿀 문자열
for (int i=0; i<testCase-1; i++) {
char compare[] = br.readLine().toCharArray();
for(int j=0; j<text.length; j++) {
if(text[j] != compare[j]) {
text[j] = '?';
}
}
}
테스트 케이스 입력 후 기준 문자열을 입력하기 때문에 반복문에서 i=1 또는 i를 0부터 시작하면 textCase-1를 해주면 된다.
비교할 문자 배열을 입력한다.
기준 문자열의 길이만큼 반복한다.
기준 문자열과 비교 문자열의 한 문자씩 비교하여 0번부터 마지막 번호까지 다른 부분이 있다면 '?'로 변경해 준다.
오타나 이해가 안가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
- 참조 -
와일드 카드 - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
'백준 - Java' 카테고리의 다른 글
[백준 - 1427][Java] 소트인사이드 (0) | 2023.01.11 |
---|---|
[백준 - 1312][Java] 소수 (0) | 2023.01.08 |
[백준 - 4673][Java] 셀프 넘버 (0) | 2023.01.02 |
[백준 - 10886][Java] 0 = not cute / 1 = cute (0) | 2022.12.28 |
[백준 - 5717][Java] 상근이의 친구들 (0) | 2022.12.24 |

안녕하세요, 성조입니다.
이번 포스팅은 자바 11버전으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/1032
1032번: 명령 프롬프트
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은
www.acmicpc.net
문제
시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.
dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.
이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.
입력
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.
출력
첫째 줄에 패턴을 출력하면 된다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
char text[] = br.readLine().toCharArray();
for (int i=0; i<testCase-1; i++) {
char compare[] = br.readLine().toCharArray();
for(int j=0; j<text.length; j++) {
if(text[j] != compare[j]) {
text[j] = '?';
}
}
}
System.out.print(text);
}catch(IOException e) {
System.out.println("error");
}
}
}
풀이
이 문제의 지문을 읽고 이해할 때 와일드카드라는 개념을 이해하면 풀이하기 더 좋다.
자바에서 와일드 카드는 두 가지가 존재하며, *(애스터리스크)는 길이가 0이상인 임의의 문자열에, ?는 임의의 한 문자에 대응한다.
1) 'abc*'는 abc, abcd, abca, abcdd등 abc 이후에 오는 모든 문자 또는 문자열을 가져올 수 있다.
2) 'abc?'는 abcd, abcc, abca 등 abc 이후에 어떤 문자든 한 문자만 가져올 수 있다.
다시 풀이로 접근한다.
문제에서 주어진 내용을 모두 이해하면 [반복 횟수, 기준 문자열, 기준 문자열과 다른 문자를 ?로 변경] 요약할 수 있다.
예제 입력을 참고한다.

예제를 보면 Input 값으로 [3, config.sys, config.inf, configures]를 입력 받는다. output 값으로는 config????가 있다.
입력에 주어진 조건인 첫째 줄에 내용을 확인한다.
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다.
코드별로 정리하면 다음과 같다.
- 반복할 횟수
int testCase = Integer.parseInt(br.readLine());
- 기준 문자열
char text[] = br.readLine().toCharArray();
- 기준 문자열과 비교해서 바꿀 문자열
for (int i=0; i<testCase-1; i++) {
char compare[] = br.readLine().toCharArray();
for(int j=0; j<text.length; j++) {
if(text[j] != compare[j]) {
text[j] = '?';
}
}
}
테스트 케이스 입력 후 기준 문자열을 입력하기 때문에 반복문에서 i=1 또는 i를 0부터 시작하면 textCase-1를 해주면 된다.
비교할 문자 배열을 입력한다.
기준 문자열의 길이만큼 반복한다.
기준 문자열과 비교 문자열의 한 문자씩 비교하여 0번부터 마지막 번호까지 다른 부분이 있다면 '?'로 변경해 준다.
오타나 이해가 안가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
- 참조 -
와일드 카드 - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
'백준 - Java' 카테고리의 다른 글
[백준 - 1427][Java] 소트인사이드 (0) | 2023.01.11 |
---|---|
[백준 - 1312][Java] 소수 (0) | 2023.01.08 |
[백준 - 4673][Java] 셀프 넘버 (0) | 2023.01.02 |
[백준 - 10886][Java] 0 = not cute / 1 = cute (0) | 2022.12.28 |
[백준 - 5717][Java] 상근이의 친구들 (0) | 2022.12.24 |