25183번: 인생은 한 방백준/문제2024. 8. 7. 14:42
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/25183
언어 : Kotlin
문제 설명 :
재형이는 인생 역전을 위해 오늘도 로또를 샀다. 로또를 구매하면 알파벳 대문자 N개가 일렬로 적힌 문자열이 주어진다.
로또에 당첨되기 위해선 인접한 문자가 모두 사전상에서 이웃한, 길이 5 이상의 부분 문자열이 로또 문자열에 존재해야 한다.
예를 들어 'C'와 사전상에서 이웃한 문자는 'B'와 'D'이고, 'Z'와 이웃한 문자는 'Y' 하나이며, 자기 자신과는 이웃하지 않는다.
따라서, 로또 문자열이 "ABCDE", "ASGXYZYXE", "WEFGHIJKA"인 경우는 당첨이고, "ABCDF", "CXYZAB", "AAAAA"는 당첨되지 않은 경우이다.
알파벳 대문자 N개로 이루어진 문자열이 주어질 때, 로또에 당첨되었는지를 구해보자.
입력 :
첫째 줄에 로또 문자열의 길이 N(5 \leq N \leq 100\,000)이 주어진다.
둘째 줄에 로또 문자열 S가 주어진다.
출력 :
로또에 당첨된 경우라면 YES를, 아니면 NO를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
10 ABABAWILSF |
YES |
10 SOGAAAAANG |
NO |
10 WEABCBCDEP |
YES |
풀이 :
문자열 S를 순회한다.
이때, 문자열 길이 5씩 잘라서 모든 인접한 쌍이 사전상으로 이웃한 관계인지 확인하기 위해 a - b = 1임을 확인한다.
하나의 경우라도 나온다면 YES 아니면 NO
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.abs
import kotlin.system.exitProcess
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val s = readLine()
for (i in 0 .. n - 5) {
val temp = s.substring(i, i + 5)
if ((0 .. 3).all { checkStr(temp[it], temp[it + 1]) }) {
bw.write("YES")
bw.flush()
exitProcess(0)
}
}
bw.write("NO")
bw.flush()
bw.close()
}
fun checkStr(a: Char, b: Char): Boolean = abs(a - b) == 1
'백준 > 문제' 카테고리의 다른 글
30403번: 무지개 만들기 (0) | 2024.08.08 |
---|---|
9584번: Fraud Busters (0) | 2024.08.08 |
20494번: 스시 (0) | 2024.08.07 |
12104번: 순환 순열 (0) | 2024.08.06 |
30684번: 모르고리즘 회장 정하기 (0) | 2024.08.06 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!