상세 컨텐츠

본문 제목

9933. 민균이의 비밀번호

Algorithm

by aeongiii 2024. 11. 29. 12:14

본문

1. 문제 분석
    1) N개의 단어 중 비밀번호를 찾아서, 비밀번호의 길이와 가운데 글자를 출력한다.
    2) 비밀번호의 경우, 비밀번호를 뒤집은 글자도 입력에 포함되어있다.
    3) 정답인 경우는 두 가지다.
        (1) 단어(las)와 뒤집은 단어(sal)가 입력값에 각각 포함된 경우
        (2) 단어(kisik)가 대칭 형태일 경우

2. 제약 조건
    2 <= N <= 100
    2 < 단어의 길이 < 14
    단어의 길이는 홀수

3. 의사결정
    1) N을 입력받는다.
    2) N만큼 for문을 돌리고, 한 줄씩 받으면서 hashmap에 [단어 : 뒤집은 단어] 로 저장할 것.
    3) 만약, 단어 = 뒤집은 단어라면 정답!
    4) 만약, value(뒤집힌 단어)중에서 현재 입력받은 단어와 같은 value가 존재한다면 정답!
    5) 3과 4 모두 해당되지 않는다면, hashmap에 저장.


4. 문제 해결
    1) 문제 없이 한번에 풀 수 있었다.

import java.util.*;
import java.io.*;

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().trim()); // N 받기
        HashMap<String, String> hashmap = new HashMap<>(); // hashmap 선언

        // 단어 받기
        for(int i = 0; i < N; i++) {

            String word = br.readLine().trim(); // 단어 받기
            StringBuffer sb = new StringBuffer(word); // 단어 sb에 저장 (뒤집기 위해서)
            String word_flip = sb.reverse().toString();

            if (word.equals(word_flip)) { // 만약 단어가 대칭이라면, 정답이기 때문에 바로 종료
                char middle = word.charAt(word.length()/2);
                System.out.println(word.length() + " " + middle);
                break;
            }

            // 만약 이미 저장된 hashmap의 value 중에서 같은 글자가 있다면, 정답이기 때문에 바로 종료
            if (hashmap.containsValue(word)) {
                char middle = word.charAt(word.length()/2);
                System.out.println(word.length() + " " + middle);
                break;
            }

            // 그렇지 않다면 해시맵에 저장
            hashmap.put(word, word_flip);

        }

    }
}

 

'Algorithm' 카테고리의 다른 글

15829. Hashing  (0) 2024.11.29
31562. 전주 듣고 노래 맞히기  (1) 2024.11.29
1769. 3의 배수  (1) 2024.11.28
10828. 스택  (0) 2024.11.28
10845. 큐  (1) 2024.11.28

관련글 더보기