메이쁘

(JAVA) 백준 9933번 : 민균이의 비밀번호 본문

Algorithm/Baekjoon

(JAVA) 백준 9933번 : 민균이의 비밀번호

메이쁘 2020. 2. 29. 21:52

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

 

9933번: 민균이의 비밀번호

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

www.acmicpc.net

 

문자열 처리 문제이다.

 

풀이 방법은 간단한데,

 

2중 for문을 통해 String 단어 두 개씩 꺼내서 각각의 양 끝 문자부터 시작해서 비교해나간다.

그래서 서로 반대에서 시작했는데 끝 지점까지 문자가 동일하다면 그 문자가 정답인 셈.

 

하지만, 여기서 컴파일 에러 라는 문제가 발생했는데...

그 이유는 바로 팰린드롬 인 단어가 있는 경우에 대한 처리를 못했다는 것이었다..! 

 

팰린드롬이란, 앞 뒤를 뒤집어도 뒤집기 전과 같은 단어를 뜻한다.

 

이를 해결하기 위해 String 배열에서 단어 두 개를 꺼내 놓고 서로의 양 끝에서부터 비교했었는데

단어 하나만 놓고 그 단어의 양 끝에서 시작해서 문자를 비교하는 코드도 넣었다!

 

다음 문제는 팰린드롬 문제다..

 

소스 코드


package string;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

// 민균이의 비밀번호
// 문자열 처리. 같은 길이의 문자열을 양 끝에서부터 같은지 탐색하기
public class p9933 {
	static ArrayList<String> pwds;
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int n = Integer.valueOf(st.nextToken());
		pwds = new ArrayList<String>();
		
		for(int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			pwds.add(st.nextToken());
		}
		
		int getIndex = getSameStrIndex(n);
		String result = pwds.get(getIndex);
		System.out.println(result.length() + " " + result.charAt(result.length() / 2));
	}
	
	// 양 끝에서 시작하면 똑같은 문자가 있는지 탐색해서 존재하면 그 문자의 인덱스를 리턴하는 함수.
	private static int getSameStrIndex(int n) {
		for(int i = 0; i < n; i++) {
			String a = pwds.get(i);
			for(int j = i; j < n; j++) {
				String b = pwds.get(j);
				if(a.length() == b.length()) {
					if(compare(a, b, a.length())) {
						return i;
					}
				}
			}
		}
		return -1;	// 없는 경우
	}
	
	// 두 개의 문자를 각자의 양 끝에서 비교하는 함수
	private static boolean compare(String a, String b, int len) {
		for(int i = 0; i < len; i++) {
			int j = len - i - 1;
			char aChar = a.charAt(i);
			char bChar = b.charAt(j);
			if(aChar != bChar) {
				return false;
			}
		}
		return true;
	}
}

 

Comments