devlog

[BOJ] 백준 9933 민균이의비밀번호-java 본문

Algorithm/BOJ

[BOJ] 백준 9933 민균이의비밀번호-java

bellaah 2019. 4. 30. 13:38

문제

창영이는 민균이의 컴퓨터를 해킹해 텍스트 파일 하나를 자신의 메일로 전송했다. 파일에는 단어가 한 줄에 하나씩 적혀있었고, 이 중 하나는 민균이가 온라인 저지에서 사용하는 비밀번호이다.

파일을 살펴보던 창영이는 모든 단어의 길이가 홀수라는 사실을 알아내었다. 그리고 언젠가 민균이가 이 목록에 대해서 얘기했던 것을 생각해냈다. 민균이의 비밀번호는 목록에 포함되어 있으며, 비밀번호를 뒤집어서 쓴 문자열도 포함되어 있다.

예를 들어, 민균이의 비밀번호가 "tulipan"인 경우에 목록에는 "napilut"도 존재해야 한다. 알 수 없는 이유에 의해 모두 비밀번호로 사용 가능하다고 한다.

민균이의 파일에 적혀있는 단어가 모두 주어졌을 때, 비밀번호의 길이와 가운데 글자를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 비밀번호의 길이와 가운데 글자를 출력한다. 항상 답이 유일한 경우만 입력으로 주어진다.

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

 

9933번: 민균이의 비밀번호

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

www.acmicpc.net

 

풀이

민균이의 비밀번호는 주어진 단어 중 하나입니다.

민균이의 비밀번호를 알 수 있는 단서는 비밀번호가 "tulipan"라면 문자열이 거꾸로 된 "napilut"도 존재한다는 것입니다.

문제에서 비밀번호는 항상 유일할 경우로만 입력을 주겠다고 나와있기 때문에 어떠한 문자열의 반대로 된 문자열이 있으면 그것이 답(비밀번호)라고 할 수 있습니다.

하지만 예외를 생각해봐야 합니다.

답은 팰린드롬 문자열일 수도 있습니다. 팰린드롬의 정의에 대해서는 아래 링크를 남겨놨으니 참고하시길 바랍니다.

팰린드롬일 경우 문자열은 "aba"이런 식으로 한 번만 주어지는데 답은 유일하기 때문에 팰린드롬 문자열이 주어진 경우 다른 문자열이 팰린드롬이거나 서로 반대되는 문자열 두 개가 존재할 수는 없습니다.

저는 한줄씩 단어를 읽고 tmp라는 변수에 단어가 거꾸로 된 형태로 저장 한 뒤 tmp와 나와 같다면 (=팰린드롬이라면) 답으로 판단하고 혹은 여태껏 들어온 문자열의 반대 형태와 현재 읽은 arr[i]가 같다면 서로 거꾸로 된 상태이므로 그것을 답으로 판단합니다.

문자열은 모두 홀수이므로 전체길이/2를 하면 항상 소수점이 생기는데 int로 자동 변환되면서 가운데 문자열을 출력하게 됩니다.

 

*팰린드롬이란? https://m.blog.naver.com/PostView.nhn?blogId=itu2004&logNo=40051349015&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 백준 2156 포도주시식-java  (0) 2019.07.02
[BOJ] 백준 5567 결혼식-java  (0) 2019.06.21
[BOJ] 백준 2252 줄세우기-java  (0) 2019.03.21
[BOJ] 백준 2583 영역구하기-java  (0) 2019.03.18
[BOJ] 백준 11403 경로찾기-java  (1) 2019.03.12
Comments