BOJ.27370

Opusdeisong·2024년 4월 5일
0

친구와 배달하기


#BOJ27370

지금 LG전자에서 인턴을 진행하고 있는데 부끄럽게도 백준 1등을 받고 있다. 그렇다보니 사내 코드잼 대회에서 최소한 수상을 해야지 면이 살 것 같다는 생각이 최근에 많이 들어서 예전 코드잼 기출들을 쭉 풀어보면서 개념을 익혀야 겠다는 생각이 들었다. 그런 의미에서 쉬운 문제부터 타임어택 연습을 했다. 푸는데는 대충 6분 정도 걸렸던거 같은데 확실히 엣지케이스가 딱히 나오기 힘든 구조의 문제라 금방 해결하였다. 대회장이었으면 아마 나보다 빠른 사람이 있지 않았을까 싶은 생각이 들기는 하는데...
조금 풀이의 포인트 한 줄을 더하자면 거리가 같은 경우의 처리를 있거나 없거나로 처리하였다. 무슨 의미냐면 어차피 차에서는 3번있으니 한 번 있으나 같은 영향을 주기 때문에 번거롭게 이곳 저곳 던져주지 않고 그냥 있냐 없냐를 기준으로 분배해줬다는 얘기다.
주석은 알겠지만 위대한 GPT님의 도움을 받았다.

import sys  
  
# 테스트 케이스의 수를 입력 받습니다.  
T = int(sys.stdin.readline())  
  
# 각 테스트 케이스에 대해 반복합니다.  
for _ in range(T):  
    # 집의 수, 사람 A의 위치, 사람 B의 위치를 입력 받습니다.  
    N, Pa, Pb = map(int, sys.stdin.readline().split())  
      
    # 집의 위치를 입력 받아서 정렬합니다.  
    house = list(map(int, sys.stdin.readline().split()))  
    house.sort()  
      
    # 거리를 합산할 변수, A와 B의 이동 거리를 저장할 변수를 초기화합니다.  
    sum = 0  
    a = 0  
    b = 0  
    temp = 0  
      
    # 각 집에 대해 반복하면서  
    for i in house:  
        # 만약 A와 집과의 거리와 B와 집과의 거리가 같다면  
        if abs(Pa - i) == abs(Pb - i):  
            # temp를 이용해 누가 이동해야 할지 결정합니다.  
            if temp == 0:  
                temp = abs(Pb - i)  
            else:  
                temp = 0  
            # 거리를 합산합니다.  
            sum += abs(Pa - i)  
        # 만약 B와 집과의 거리가 더 짧다면  
        elif abs(Pa - i) > abs(Pb - i):  
            # 거리를 합산하고, B의 이동 거리를 갱신합니다.  
            sum += abs(Pb - i)  
            b += abs(Pb - i)  
        else:  
            # 그 외의 경우에는 거리를 합산하고, A의 이동 거리를 갱신합니다.  
            sum += abs(Pa - i)  
            a += abs(Pa - i)  
      
    # A와 B 중 누가 더 많이 이동했는지 확인하고, 덜 이동한 사람에게 temp를 더합니다.  
    if a > b:  
        b += temp  
    else:  
        a += temp  
      
    # 총 이동 거리와 A와 B의 이동 거리 차이를 출력합니다.  
    print(sum * 2,abs(a - b) * 2)  

위 코드의 치명적인 오류를 발견하여 새로운 정해를 첨부하는데 이거 왜 맞게 되냐 ㅋㅋ;;

import sys

T = int(sys.stdin.readline())
for _ in range(T):
    N, Pa, Pb = map(int, sys.stdin.readline().split())
    house = list(map(int, sys.stdin.readline().split()))
    house.sort()
    sum = 0
    a = 0
    b = 0
    temps = []
    for i in house:
        if abs(Pa - i) == abs(Pb - i):
            temps.append(abs(Pa - i))
            sum += abs(Pa - i)
        elif abs(Pa - i) > abs(Pb - i):
            sum += abs(Pb - i)
            b += abs(Pb - i)
        else:
            sum += abs(Pa - i)
            a += abs(Pa - i)
    for temp in temps:
        if a > b:
            b += temp
        else:
            a += temp
    print(sum * 2,abs(a - b) * 2)
    ```
profile
Dorsum curvatum facit informaticum.

0개의 댓글