20112번: 사토르 마방진백준/문제2024. 6. 20. 10:44
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/20112
언어 : Kotlin
문제 설명 :
사토르 마방진에 대해 들어본 적이 있는가? 사토르 마방진은 간단히 말하면 "가로로 읽었을 때와 세로로 읽었을 때 똑같이 읽히는 단어 집합"이다. 예시로는 다음과 같은 것들이 있다.
라팔아
팔렸니
아니오
호반우
반기는
우는나
술을 좋아하는 드립이는 전날 과음한 나머지 수학 수업 시간에 졸다가 선생님에게 걸려버렸고, 단어 집합들이 사토르 마방진인지 아닌지 판단해야 하는 숙제를 받았다.
하지만 N × N 크기의 큰 단어 집합이 사토르 마방진인지 눈으로 확인하는 것은 쉽지 않았다.
불쌍한 드립이는 숙제를 다 끝내기 전까지 집에 갈 수 없다. N × N 크기의 단어 집합이 주어지면, 주어진 단어 집합이 사토르 마방진인지 아닌지 판단하는 프로그램을 작성하자.
드립이를 도와주자!
입력 :
첫째 줄에 단어의 길이 N이 주어진다. (2 ≤ N ≤ 100)
둘째 줄부터 N개의 줄에 걸쳐 단어 집합의 각 행의 단어들이 공백 없이 주어진다. 단어들은 알파벳 대문자로만 이루어져 있다.
출력 :
주어진 단어 집합이 사토르 마방진이면 "YES", 아니면 "NO"를 출력한다. (따옴표 제외)
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
3 AAB ACD BDE |
YES |
4 APPL PPAP PADD LPOV |
NO |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val map = Array(n) { readLine() }
val dic = mutableSetOf<String>()
for (i in map.indices) {
val sb = StringBuilder()
for (j in map.indices) {
if (!dic.contains(map[i])) dic += map[i]
sb.append(map[j][i])
}
if (!dic.contains(sb.toString())) dic += sb.toString()
}
bw.write(if (dic.size == n) "YES" else "NO")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
1334번: 다음 팰린드롬 수 (0) | 2024.06.21 |
---|---|
5698번: Tautogram (0) | 2024.06.21 |
글로벌 포닉스 (0) | 2024.06.20 |
末尾の文字 (Last Letter) (0) | 2024.06.20 |
7575번: 바이러스 (0) | 2024.06.14 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!