흙금이네 블로그

[BOJ] 2136 - 개미 (Python, JavaScript) 본문

알고리즘

[BOJ] 2136 - 개미 (Python, JavaScript)

흙금 2023. 5. 19. 22:25

 

 

아이디어

 

개미들이 서로 부딪히더라도 마지막 개미가 떨어지는 시간과 처음 움직이는 방향으로 떨어지는 개미 수는 변하지 않는다.

 

 

풀이 #1 (Python)

 

전체 개미 중 처음 움직이는 방향이 왼쪽인 개미 수를 구하고,

왼쪽으로 떨어지는 경우와 오른쪽으로 떨어지는 경우를 나눠 개미가 이동하는 시간의 최댓값을 구한다.

 

import sys

input = sys.stdin.readline

def solution():
    N, L = map(int, input().split())
    ants = []
    idx = left_t = right_t = 0
    for _ in range(N):
        p = int(input())
        if p < 0:
            p = -p
            idx += 1
            if p > left_t:
                left_t = p
        elif L-p > right_t:
            right_t = L-p
        ants.append(p)
    sorted_ants = sorted(ants)
    if left_t > right_t:
        print(ants.index(sorted_ants[idx-1])+1, left_t)
    else:
        print(ants.index(sorted_ants[idx])+1, right_t)

solution()

 

 

 

풀이 #2 (JavaScript)

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

function solution() {
    const [N, L] = input[0].split(' ').map(Number);
    let ants = [];
    let idx = leftT = rightT = 0;
    for (let i=1; i<=N; i++) {
        let p = Number(input[i]);
        if (p < 0) {
            p = -p;
            idx += 1;
            if (p > leftT) leftT = p;
        }
        else if (L-p > rightT) rightT = L-p;
        ants.push(p);
    }
    const sortedAnts = [...ants].sort((a, b) => a-b);
    if (leftT > rightT) console.log(ants.indexOf(sortedAnts[idx-1])+1, leftT);
    else console.log(ants.indexOf(sortedAnts[idx])+1, rightT);
}

solution();

 

Comments