임스와 함께하는 미니게임

 

25757번: 임스와 함께하는 미니게임

첫 번째 줄에는 사람들이 임스와 같이 플레이하기를 신청한 횟수 $N$과 같이 플레이할 게임의 종류가 주어진다. $(1 \le N \le 100\,000)$ 두 번째 줄부터 $N$개의 줄에는 같이 플레이하고자 하는 사람들

www.acmicpc.net

 

 

내 코드

from sys import stdin

N, G = map(str, stdin.readline().split())
user = []

for _ in range(int(N)):
    user.append(stdin.readline().strip())

user = set(user)
if G == "F":
    print(len(user)//2)
elif G == "O":
    print(len(user)//3)
else:
    print(len(user))
728x90

실버 5 - 올림픽

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

 

내 코드

from sys import stdin

# N: 참여 나라 수
# K: 등수 구하고자 하는 나라

# arr[0] 국가 나타내는 숫자
# arr[1] 금
# arr[2] 은
# arr[3] 동

N, K = map(int, stdin.readline().split())
scores = []
target = []

for _ in range(N):
    newScore = (list(map(int, stdin.readline().split())))
    if newScore[0] == K:
        target = newScore
    else:
        scores.append(newScore)

scores.sort(key=lambda x: (x[1], x[2], x[3]), reverse=True)
win = []
lose = []

for idx in range(1, 4):
    for s in scores:
        if idx >= 2:
            if s not in win and s not in lose and s[idx] > target[idx]:
                win.append(s)
            elif s not in win and s not in lose and s[idx] < target[idx]:
                lose.append(s)
        else:
            if s[idx] > target[idx]:
                win.append(s)
            elif s[idx] < target[idx]:
                lose.append(s)
    for w in win:
        if w in scores:
            scores.remove(w)
    if len(lose) > 0:
        for l in lose:
            if l in scores:
                scores.remove(l)

print(len(win) +1)
728x90

실버 5 - 덩치 7568

Brute Froce Search

Implements

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

 

내 코드

from sys import stdin

N = int(stdin.readline())
p = []
rank = [0 for i in range(N)]

for _ in range(N):
    p.append(list(map(int, stdin.readline().split())))

idx = 0
while True:
    if idx == N:
        break
    r = 1
    for i in range(N):
        if i == idx:
            pass
        if p[idx][0] < p[i][0] and p[idx][1] < p[i][1]:
            r += 1
    rank[idx] = r
    idx += 1

print(*rank)
728x90

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

 

1495번: 기타리스트

첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다.

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split("\n");
const [N, S, M] = input.shift().split(" ").map(i => Number(i));
// 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다.
const volumes = input.shift().split(' ').map(i => Number(i));

// N: 곡의 개수
// S: 시작 볼륭
// M: 마지노선 볼륨 -> M보다 큰 값으로 볼륨을 바꿀 수 없다.

// 각 곡이 시작하기 전에 볼륨 바꿀 수 있음.
// V[i]는 i번째 곡을 연주하기 전에 바꿀 수 있는 볼륨을 의미
// 항상 리스트에 적힌 차이로만 볼륨을 바꿀 수 있다.
// 즉 현재 볼륨이 P이고 지금 i번재 곡을 연주하기 전이라면,
// i번째 곡은 P+V[i] 나 P-V[i]로 연주해야 한다.
// 0보다 작은 값으로 볼륨을 바꾸거나, M보다 큰 값으로 볼륨을 바꿀 수 없다.


// 3 5 10
// 5 3 7

let stack = [S];
let index = 0;

while(index < N) {
    if(stack.length === 0) {
        break;
    }
    let set = new Set(stack);
    const oldStack = [...Array.from(set)];
    stack = [];
    const len = oldStack.length;

    for(let i = 0 ; i < len ; i++) {
        const item = oldStack.pop();

        if(item + volumes[index] <= M) {
            stack.push(item + volumes[index]);
        }

        if(item - volumes[index] >= 0) {
            stack.push(item - volumes[index]);
        }
    }
    index++;
}

if(stack.length === 0) {
    console.log(-1);
} else {
    console.log(Math.max(...stack));
}
728x90

+ Recent posts