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

 

16283번: Farm

입력은 표준입력을 사용한다. 첫 번째 줄에 네 정수 a, b, n, w가 한 줄에 주어진다. 1 ≤ a ≤ 1,000, 1 ≤ b ≤ 1,000, 2 ≤ n ≤ 1,000, 2 ≤ w ≤ 1,000,000이다.

www.acmicpc.net

[알고리즘]

백준 사이트에서 알고리즘 문제를 풀고 나면 다른 사람이 쓴 코드를 항상 확인해보는데, kocc10님의 코드에 배울 점이 많아서 포스팅 해본다.

 

[내가 쓴 코드]

a, v, n, w = map(int, input().split())

ans = []
for i in range(n) : 
    for j in range(n) : 
        if a*i + v*j == w and i+j == n : 
            ans.append((i,j))
if len(ans) == 1 : 
    print(*ans[0])
else:
    print(-1)

[kocc10님이 쓴 코드]

a, b, n, w = map(int, input().split())
cnt = 0
for i in range(1, n):
    A = i
    B = n - i
    if A * a + B * b == w:
        s = A
        g = B
        cnt += 1
       
if cnt == 1:
    print(s, g)
else:
    print(-1)

 

[알게된 점]

  • 양과 염소의 합이 n이니까 굳이 이중 for문으로 하나씩 증가하며 확인하는 것이 아니라, 인덱스를 양 = i, 염소 = n-i로 설정한다.
  • 조금만 더 생각하면 과도한 반복문 사용을 줄일 수 있다.(연습 많이 하면서 알아가기 연습 많이 하기)
  • 간단한 문제는 배열에 저장하지 않고 변수에 저장하여 메모리를 덜 사용할 수 있다.
  • 나는 문제해결을 위해 항상 배열을 우선적으로 고려해보는 고질병이 있다. 의식적으로 연습을 하면서 고쳐나가자
  • 이 문제는 답이 여러개인 경우 아예 -1을 처리해버리기 때문에 꼭 배열을 쓰지 않아도 된다.
sebinChu