반응형
https://www.acmicpc.net/problem/9933
- 문제
- 문제 풀이
백준 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; // 비밀번호를 찾았으므로 반복문을 종료
}
}
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 16165번 : 걸그룹 마스터 준석 – JAVA [자바] (0) | 2023.07.31 |
---|---|
[백준] 13414번 : 수강신청 – JAVA [자바] (0) | 2023.07.30 |
[백준] 1822번 : 차집합 – JAVA [자바] (0) | 2023.07.26 |
[백준] 20920번 : 영단어 암기는 괴로워 – JAVA [자바] (0) | 2023.07.26 |
[백준] 25192번 : 인사성 밝은 곰곰이 – JAVA [자바] (0) | 2023.07.26 |
댓글