본문 바로가기
코딩테스트

[Python] 백준 19941번 - 햄버거 분배

by 박매트 2024. 6. 20.

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() -> 문자열 배열로 변환....

 

파이썬에 너무 익숙해졌다... 다음주부턴 거금을 주고 사뒀던 안드로이드 강의를 꼭 들어야겠다..