본문 바로가기

컴퓨터/BOJ

[BOJ](Python) 2991번 : 사나운 개

https://www.acmicpc.net/problem/2991

 

2991번: 사나운 개

창영 마을의 우체부, 우유배달원, 신문배달원은 상근이네 집에 가는 것을 매우 싫어한다. 그 이유는 상근이네 집에는 사나운 개 두 마리가 지키고 있기 때문이다. 하지만, 그들은 이 개의 행동��

www.acmicpc.net

소스 코드는 다음과 같다.

a,b,c,d = list(map(int, input().split()))
x,y,z = map(int, input().split())
dog_1 = []; dog_2 =[]
dog_1.extend([1]*a); dog_1.extend([0]*b)
dog_2.extend([1]*c); dog_2.extend([0]*d)

P = M = N = 0
if dog_1[x % len(dog_1)-1] == 1:
    P += 1
if dog_2[x % len(dog_2)-1] == 1:
    P += 1

if dog_1[y % len(dog_1)-1] == 1:
    M += 1
if dog_2[y % len(dog_2)-1] == 1:
    M += 1

if dog_1[z % len(dog_1)-1] == 1:
    N += 1
if dog_2[z % len(dog_2)-1] == 1:
    N += 1

print(P)
print(M)
print(N)

첫 번째 개가 2분 동안 공격적이고([1]), 2분 동안 조용히 쉬고 있다면([0]) dog_1 = [1,1,0,0] 으로 나타낼 수 있고, 두 번째개도 3분 동안 공격적이고, 3분 동안 조용히 쉬고 있다면 같은 방식으로 dog_2 = [1,1,1,0,0,0] 으로 나타낼 수 있다.

 

우체부이 도착한 시간 P = 1라고 할 때, 아침이 밝은 후 1분 뒤에 도착했다. 첫 번째 개는 처음 1분 동안 짖고 있는데, 1분이 끝날때 우체부가 도착했으므로 dog_1은 우체부를 향해 짖게 된다.

우체부가 dog_1을 만났을 때 짖고있는지 확인

dog_2에 대해서 같은 방식으로 진행하면 dog_2는 우체부를 향해 짖는다는 것을 알 수 있고, 리스트로 확인하면 다음과같다.

개가 우체부에게 짖는지 확인하는 리스트

참고: 개가 5분 동안 짖고, 5분 동안 쉬고 있을 때, 우체부가 5분 뒤에 도착한다면 개가 짖기 끝날 때 우체부가 도착하는 것인데, 이 경우에도 개는 우체부에게 짖는다고 본다.(입력값을 확인)

 

같은 방식으로 우유배달원, 신문배달원에 대해서 확인하면 된다.

 

a,b,c,d = list(map(int, input().split()))
x,y,z = map(int, input().split())
dog_1 = []; dog_2 =[]
dog_1.extend([1]*a); dog_1.extend([0]*b)
dog_2.extend([1]*c); dog_2.extend([0]*d)
P = M = N = 0
if dog_1[x % len(dog_1)-1] == 1:
    P += 1
if dog_2[x % len(dog_2)-1] == 1:
    P += 1

if dog_1[y % len(dog_1)-1] == 1:
    M += 1
if dog_2[y % len(dog_2)-1] == 1:
    M += 1

if dog_1[z % len(dog_1)-1] == 1:
    N += 1
if dog_2[z % len(dog_2)-1] == 1:
    N += 1

print(P)
print(M)
print(N)

dog_1이 a분 동안 짖고, b분 동안 쉬고 있다면 dog_1의 리스트에선 1의 개수가 a, 0의 개수가 b개만큼 있도록 만든다.

우체부는 1분에 왔을 때 dog_1[0]을 확인함으로 우체부가 P분 일땐 dog_1[P % len(dog_1) - 1]로 한다.

 

이렇게 된다면 dog_1 = [1,1,0.0]일때 P = 4라면 dog_1[4%4-1] = dog_1[-1] 이므로 마지막 요소를 확인하고, P = 6 이라면 dog_2[1]을 확인한도록 한다.