민균이의 비밀번호 9933번 [8일차]
시간제한 | 메모리 제한 |
1초 | 128MB |
문제
창영이는 민균이의 컴퓨터를 해킹해 텍스트 파일 하나를 자신의 메일로 전송했다. 파일에는 단어가 한 줄에 하나씩 적혀있었고, 이 중 하나는 민균이가 온라인 저지에서 사용하는 비밀번호이다.
파일을 살펴보던 창영이는 모든 단어의 길이가 홀수라는 사실을 알아내었다. 그리고 언젠가 민균이가 이 목록에 대해서 얘기했던 것을 생각해냈다. 민균이의 비밀번호는 목록에 포함되어 있으며, 비밀번호를 뒤집어서 쓴 문자열도 포함되어 있다.
예를 들어, 민균이의 비밀번호가 "tulipan"인 경우에 목록에는 "napilut"도 존재해야 한다. 알 수 없는 이유에 의해 모두 비밀번호로 사용 가능하다고 한다.
민균이의 파일에 적혀있는 단어가 모두 주어졌을 때, 비밀번호의 길이와 가운데 글자를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 수 N (2 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 파일에 적혀있는 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있으며, 길이는 2보다 크고 14보다 작은 홀수이다.
출력
첫째 줄에 비밀번호의 길이와 가운데 글자를 출력한다. 항상 답이 유일한 경우만 입력으로 주어진다.
나의코드
package day8;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class Solution1 {
// 민균이의 비밀번호 - 9933번
public static void main(String[] args) throws IOException {
// 모든 단어의 길이 홀수
// 비밀번호를 뒤집어서 쓴 문자열도 포함
// 입력받은 값을 모두 넣어주기
// 모든 단어들을 뒤집어서 들어가있는 문자가 있는지 확인
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
HashSet <String> set = new HashSet<>();
// 입력만은 값이 중복된 문자열이 없도록 hashset에 넣어주기
for(int i = 0; i < N; i++){
String line = br.readLine();
set.add(line);
}
br.close();
StringBuilder sb1 = new StringBuilder();
// set을 돌아보면서 뒤집은 문자열과 겹치는 문자가 있는지 확인하기
for(String arr : set){
StringBuilder sb = new StringBuilder(arr);
// 문자열 뒤집기
String reverse = String.valueOf(sb.reverse());
//뒤집은 문자열이 set에 존재 하는지 확인 - 있다면 해당 문자열의 길이와 중간 문자 출력
if(set.contains(reverse)){
int length = reverse.length();
sb1.append(length).append(" ").append(reverse.substring(length/2, length/2+1));
break;
}
}
System.out.println(sb1.toString());
// util클래스 사용하는 것들 전부 - null항상 체크해주기
}
}
Set<String> set = new HashSet<>();
-> 확장성면에서는 set이 더 좋을수가있음
'Algorithm > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 - 전주 듣고 노래 맞히기 (1) | 2024.07.26 |
---|---|
[코딩테스트] 백준 - 국회의원 선거 (0) | 2024.07.26 |
[코딩테스트] 백준 - 요세푸스 문제 (0) | 2024.07.25 |
[코딩테스트] 백준 - 에디터 (0) | 2024.07.25 |
[코딩테스트] 백준 - 스택 (0) | 2024.07.25 |