문제풀이/BOJ

[Python] BOJ/백준 2863번 이게 분수?

서채리 2021. 6. 10. 16:33

[문제]

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

 

2863번: 이게 분수?

첫째 줄에 표를 몇 번 돌려야 표의 값이 최대가 되는지 출력한다. 만약, 그러한 값이 여러개라면 가장 작은 값을 출력한다.

www.acmicpc.net



[풀이]

처음에 간단하게 생각하고 제출한 코드가 결과는 맞게 나오는데 틀렸다고 나와서.. 아무리 생각해도 틀리는 이유를 모르겠기에 코드 수정을 하지 않고 싹 갈아엎었다. 백준은 틀리면 틀린 테스트 케이스를 알려줬으면 좋겠다... 쓰다 보니 생각난 건데 그냥 다음부터는 랜덤수 받아와서 테스트해보면 될 것 같다 ㅎㅎ 규칙을 찾다 보니 표의 아래줄의 순서를 거꾸로 받고, 맨 마지막 숫자 table[3] 만 첫번째(table[0]) 에 위치시키고 나머지 수는 순서대로 받아주면 규칙이 생겼다. 규칙만 찾으면 나름 간단한 코드!! 

 


[코드]

- 제출 코드

if __name__ == "__main__":
    table = []
    table += map(int, input().split())
    table += list(map(int, input().split()))[::-1]

    result = []
    for i in range(4):
        s = table[0] / table[3] + table[1] / table[2]
        result.append(s)
        table = [table[-1]] + table[:-1]
    print(result.index(max(result)))

 

- 왜틀렸지?.. 언제가 이유 찾아보기

def rotate(tab):
    tab[0], tab[1] = tab[1], tab[0]
    tab[0], tab[2] = tab[2], tab[0]
    tab[2], tab[3] = tab[3], tab[2]
    return table


if __name__ == "__main__":
    table = []
    for _ in range(2):
        a, b = map(int, input().split())
        table.append(a)
        table.append(b)

    max_v = 0
    cnt = 0
    for i in range(4):
        value = table[0]/table[2] + table[1]/table[3]
        if value > max_v:
            max_v = value
            cnt = i
        print(table, max_v, cnt)
        rotate(table)

    print(cnt)