본문 바로가기
백준

[백준] 9933번 : 민균이의 비밀번호 – JAVA [자바]

by Hongwoo 2023. 7. 27.
반응형

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

 

9933번: 민균이의 비밀번호

첫째 줄에 단어의 수 N (2 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 파일에 적혀있는 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있으며, 길이는 2보다 크고 14보다 작은

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 9933번 민균이의 비밀번호는 브론즈 1 난이도의 문자열 및 해시 문제이다. 

 

이 문제에서는 N개의 단어가 주어지고 이 중에서 민균이의 비밀번호를 찾으면 된다. 여기서 민균이의 비밀번호는 문자열이 있으면 이 문자여을 뒤집은 단어도 있는 게 민균이의 비밀번호다. N개의 단어 중에서 민균이의 비밀번호를 찾고 이 비밀번호의 길이와 가운데 글자를 출력하면 된다.

 

이 문제는 HashSet를 이용해서 간단하게 풀 수 있다. 우선, 단어들을 입력받을 때 이 HashSet에 추가해 준다. 그리고, 이 단어를 뒤집은 단어가 만약에 HashSet에 있으면 그 단어가 민균이의 비밀번호가 되고 이 단어의 길이와 가운데 글자를 출력하면 된다.

 

우선, 단어를 뒤집는 건 StringBuilder에 있는 reverse() 함수를 이용하면 된다. String 클래스에 따로 reverse() 함수가 없기 때문에 입력받은 단어를 StringBuilder로 변환해 주고 이 단어를 다시 String으로 변환해 주면 된다. 이건 다음과 같이 할 수 있다.

 

//String 뒤집기

String s;
String reversed = new StringBuilder(s).reverse().toString();

 

이 뒤집은 단어가 HashSet에 포함되어 있으면 이 단어의 길이와 가운데 글자를 출력하면 된다. 길이는 String 클래스의 length() 함수를 쓰면 되고 가운데 글자는 charAt() 함수를 써서 가운데 인덱스를 출력하면 된다.

 

자세한 코드는 아래에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

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));
        int n = Integer.parseInt(br.readLine()); // 단어의 수를 입력 받음

        Set<String> set = new HashSet<>(); // 중복을 제거하기 위해 Set을 사용

        for (int i = 0; i < n; i++) {
            String s = br.readLine(); // 단어를 입력 받음

            set.add(s); // 입력 받은 단어를 Set에 추가

            StringBuilder sb = new StringBuilder(s);
            String reverse = sb.reverse().toString(); // 입력 받은 단어를 뒤집어서 새로운 문자열 만듬

            if (set.contains(reverse)) { // 뒤집은 문자열이 Set에 있는지 확인하여 비밀번호인지 검사
                System.out.println(reverse.length() + " " + reverse.charAt(reverse.length() / 2));
                // 비밀번호의 길이와 가운데 글자를 출력
                break; // 비밀번호를 찾았으므로 반복문을 종료
            }
        }
    }
}

 

반응형

댓글