문제 출처 : https://www.acmicpc.net/problem/15886
언어 : Kotlin
문제 설명 :
욱제는 구사과의 열렬한 팬이다. 오늘 욱제는 구사과에게 선물()을 전달해주려고 한다. 지난 며칠간의 관찰 끝에 욱제는 구사과의 이동 패턴을 모두 파악했다.
구사과가 있는 곳은 1×N 크기의 직사각형 지도로 나타낼 수 있으며, 1×1크기의 정사각형으로 나누어져 있다. 구사과의 위치는 (1, x)로 나타낼 수 있으며, (1, x)는 왼쪽에서부터 x번째 칸을 의미한다.
지도의 각 칸에는 E, W중의 한 문자가 쓰여져 있는데, 구사과는 이 문자를 이용해서 이동한다. 구사과의 위치가 (1, x)인 경우에 E가 쓰여져 있는 칸에 서 있었다면, (1, x+1)로, W의 경우에는 (1, x-1)로 순간이동한다. 구사과는 지치지 않기 때문에, 계속해서 이동한다.
욱제는 구사과의 위치를 모르기 때문에, 구사과가 이동을 시작하는 위치와 관계없이 선물을 주는 방법을 알아내려고 한다. 최소 몇 개의 칸 위에 선물을 놓으면, 구사과가 항상 선물을 가져가는지 구하는 프로그램을 작성하시오. 선물이 놓여진 칸에 구사과가 이동하면, 구사과는 항상 선물을 가져간다.
입력 :
첫째 줄에 골목길의 길이 N이 주어진다. (2 ≤ N ≤ 1,000)
둘째 줄에 길이 N짜리 구사과가 있는 곳의 지도가 주어진다.
지도에 쓰여 있는대로 이동했을 때, 지도를 벗어나는 경우는 없다.
출력 :
첫째 줄에 최소 몇 개의 칸에 선물을 놓아야 하는지 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
6 EEWWEW |
2 |
5 EEEEW |
1 |
풀이 :
단순히 좌우로만 움직이기 때문에 좌우 왔다갔다 반복하는 구간을 구하면 된다.
이렇게 반복되려면 EW에 해당하는 것을 찾으면 된다.
E를 밟으면 +1 W를 밟으면 -1이므로 계속 그 두 사이를 왔다갔다 하기 때문
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()
bw.write("${readLine().replace("EW", "0").count { it == '0' }}")
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
11008번: 복붙의 달인 (1) | 2024.05.21 |
---|---|
25630번: 팰린드롬 소떡소떡 (0) | 2024.05.21 |
6841번: I Speak TXTMSG (0) | 2024.05.20 |
13419번: 탕수육 (0) | 2024.05.20 |
11121번: Communication Channels (0) | 2024.05.20 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!