https://www.acmicpc.net/problem/19941
N, K = list(map(int,input().split()))
li = list(input())
check = [0] * (len(li))
# 햄버거를 먹었다면 1로 설정한다.
for i, value in enumerate(li):
if value == 'P':
start = 0 if (i - K)<= 0 else i - K
end = N-1 if (i + K)>= N else i + K
for search in range (start,end+1):
if check[search] == 0 and li[search] == 'H':
check[search] = 1
break
print(check.count(1))
입력받은 문자열을 기준으로 해당 문자열 길이를 가진 check 배열을 선언한다.
순서에 맞춰 사람이 존재했다면, 사람 주변으로 햄버거를 먹을 수 있는 범위(start, end) 값을 정해 탐색한다.
앞에서 부터 뒤까지 검사를 하게 되는데, 이 때 최대 먹을 수 있는 햄버거의 개수를 알기 위해서 처음 만난 햄버거를 먹어야하고 break를 한다. 한 사람 당 하나의 햄버거만 먹을 수 있기 때문이다.
이렇게 각 사람을 기준으로 먹을 수 있는 햄버거를 1로 설정하고 for문을 다 돌면
1인 곳은 햄버거를 먹은 index이므로 1의 개수를 세어주면 끝..!
다른 사람 답
def can_eat(cur):
global cnt
# K거리 이하의 햄버거를 왼쪽부터 먹기위함
for j in range(cur - K, cur + K + 1):
if 0 <= j < N and arr[j] == "H":
cnt += 1
arr[j] = "X"
return
N, K = map(int, input().split())
cnt = 0
arr = list(input())
for i in range(N):
if arr[i] == 'P':
can_eat(i)
print(cnt)
오호 거의 비슷하다 그냥 문자를 X로 바꿔주셨구나... 그래도 되구나..
따로 배열을 만들 필요는 없구나... ! 범위 설정도 그냥 바로 if문으로 설정을 하셨군
Kotlin 버전 답
import java.util.*
fun main() {
val scanner = Scanner(System.`in`)
val (N, K) = scanner.nextLine().split(" ").map { it.toInt() }
val li = scanner.nextLine().toCharArray()
val check = IntArray(li.size) { 0 }
for (i in li.indices) {
if (li[i] == 'P') {
val start = if ((i - K) <= 0) 0 else i - K
val end = if ((i + K) >= N) N - 1 else i + K
for (search in start..end) {
if (check[search] == 0 && li[search] == 'H') {
check[search] = 1
break
}
}
}
}
println(check.count { it == 1 })
}
li.indices ... 배열에 각각 접근을 하려면 저렇게 해야하나보다
입력받는 형식
val scanner = Scanner(System.`in`)
scanner.nextLine().split(" ").map{ it.toInt() }
scanner.nextLine().charArray() -> 문자열 배열로 변환....
파이썬에 너무 익숙해졌다... 다음주부턴 거금을 주고 사뒀던 안드로이드 강의를 꼭 들어야겠다..
'코딩테스트' 카테고리의 다른 글
[Python] 백준 1138번 - 한 줄로 서기 (0) | 2024.06.21 |
---|---|
[Python] 백준 25757번 - 임스와 함께하는 미니게임 (0) | 2024.06.20 |
[Python] 백준 10431번 - 줄세우기 (0) | 2024.06.13 |
[Python] 백준 - 2563번 색종이 (0) | 2024.06.12 |
[Python] 백준 1158번 - 요세푸스 문제 (1) | 2024.06.11 |