Jun's Development Journey

[BOJ] 9933번 민균이의 비밀번호 본문

BOJ/String

[BOJ] 9933번 민균이의 비밀번호

J_Jayce 2019. 8. 26. 20:34

문제

https://www.acmicpc.net/problem/9933

 

9933번: 민균이의 비밀번호

문제 창영이는 민균이의 컴퓨터를 해킹해 텍스트 파일 하나를 자신의 메일로 전송했다. 파일에는 단어가 한 줄에 하나씩 적혀있었고, 이 중 하나는 민균이가 온라인 저지에서 사용하는 비밀번호이다. 파일을 살펴보던 창영이는 모든 단어의 길이가 홀수라는 사실을 알아내었다. 그리고 언젠가 민균이가 이 목록에 대해서 얘기했던 것을 생각해냈다. 민균이의 비밀번호는 목록에 포함되어 있으며, 비밀번호를 뒤집어서 쓴 문자열도 포함되어 있다. 예를 들어, 민균이의 비밀번호가

www.acmicpc.net

 

 

풀이

이 문제는 정답에 대한 전제 조건에 유일한 답이 존재하는 경우이므로 답이 나올 경우에 바로 출력하고 끝내면 되는 문제이다. 가장 우선적이고 문자열이 회문일 경우에는 비밀번호의 조건을 충족하기 때문에 회문의 경우를 가장 먼저 검사해주고, 아니라면 각 문자열끼리 중간 문자를 기준으로 비교해보며 암호인지에 대한 판별을 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.*;
public class Main {
    static Scanner scan = new Scanner(System.in);
    static int N;
    static ArrayList<String> list;
    
    static void solution() {
        N = scan.nextInt();
        list = new ArrayList<String>();
        scan.nextLine();
        //입력
        for(int i=0;i<N;i++
            list.add(scan.nextLine());
        
        for(int i=0;i<N;i++) {
            if(is_palin(list.get(i))) {//답이 유일하므로 회문일 경우 답이다.
                String str = list.get(i);
                System.out.println(str.length()+" "+str.charAt(str.length()/2));
                return;
            }
            for(int j=0;j<N;j++) {//회문이 아닐 경우엔 다른 문자열과 비교해가며 확인한다.
                if(i!=j) {
                    if(is_password(list.get(i),list.get(j))) {
                        String str = list.get(i);
                        System.out.println(str.length()+" "+str.charAt(str.length()/2));
                        return;
                    }
                }
            }
        }
    }
    
    static boolean is_palin(String str) {//회문 검사
        int len = str.length();
        for(int i=0;i<len;i++) {
            if(str.charAt(i)!=str.charAt(len-i-1))
                return false;
        }
        return true;
    }
    static boolean is_password(String s1, String s2) {//암호 검사
        int len = s1.length();
        if(len!=s2.length())
            return false;
        
        for(int i=0;i<len/2;i++) {
            if(s1.charAt(i)!=s2.charAt(len-i-1))
                return false;
        }
        
        return s1.charAt(len/2== s2.charAt(len/2) ? true : false;
    }
    public static void main(String[] args) {
        solution();
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'BOJ > String' 카테고리의 다른 글

[BOJ] 8958 OX 퀴즈  (0) 2021.02.16
[BOJ] 4949번 균형잡힌 세상  (0) 2019.08.26
[BOJ] 3986번 좋은 단어  (0) 2019.08.26
[BOJ] 1764번 듣보잡  (0) 2019.08.22
[BOJ] 1475번 방 번호  (0) 2019.08.22