CS/Algorithm
[Java] 백준 11293번: Password
코드스피드
2025. 5. 28. 10:02
반응형
https://www.acmicpc.net/problem/11293
[풀이]
영어로 되어 있어서 그렇지, 알고 보면 쉬운 문제이다.
일단 기본적으로, 문제 내에서 표기하는 모든 숫자는 1번 인덱스부터 시작한다.
그 다음,
첫 번째 숫자는 몇 번째 암호와 비교할지
두 번째 숫자는 해당 암호의 몇 번째 글자와 사용자의 첫 번째 글자와 비교할지
세 번째 숫자는 해당 암호의 몇 번째 글자와 사용자의 두 번째 글자와 비교할지를 나타낸다.
특별히 신경쓴 점은, 암호를 입력받을 때 중간에 띄어쓰기가 없이 char 배열로 입력받아야 했기 때문에 replace 함수를 통해 공백을 제거한 후, toCharArray()를 통해 char 배열로 만들어주었다.
그리고 자바의 배열에서 0번 인덱스부터 시작하는 점과, 입력받을 때는 1번 인덱스로 시작하는 점을 감안하여 -1 처리하여 해당 부분을 편하게 계산할 수 있도록 바꾸어주었다.
[코드]
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
for (int c = 1; c <= n; c++) {
sb.append("Customer ").append(c).append("\n");
int a = Integer.parseInt(br.readLine());
char[][] ans = new char[a][];
for (int i = 0; i < a; i++) {
ans[i] = br.readLine().replace(" ", "").toCharArray();
}
int l = Integer.parseInt(br.readLine());
for (int i = 0; i < l; i++) {
st = new StringTokenizer(br.readLine());
int target = Integer.parseInt(st.nextToken()) - 1;
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
char xx = st.nextToken().charAt(0);
char yy = st.nextToken().charAt(0);
if (xx == ans[target][x] && yy == ans[target][y]) {
sb.append("correct").append("\n");
} else {
sb.append("error").append("\n");
}
}
}
System.out.print(sb);
}
}
[시간복잡도]
O(n)
반응형