본문 바로가기
알고리즘/대회 참여

2020 IGRUS Newbie Programming Contest 참여

by 유시은 2020. 9. 27.
from sys import stdin
input = stdin.readline

n, m = map(int, input().split())
if m == 1 or m == 2:
    print("NEWBIE!")
elif m<=n:
    print("OLDBIE!")
else:
    print("TLE!")

 

A 뉴비의 기준은 뭘까?

 

19944번: 뉴비의 기준은 뭘까?

2020 INPC는 IGRUS 뉴비들을 위해 열리는 대회입니다. 하지만 영수 할아버지나 인용 할아버지와 같이 14학번이지만 마음만은 뉴비인 어르신들 때문에 대회장이 TLE들의 파티가 되자 뉴비의 기준을 정

www.acmicpc.net

 

 

from sys import stdin
input = stdin.readline

n = int(input())
m = str(bin(n))
if n>=0:
    print(len(m)-2)
else:
    print(32)

 

B 새로운 언어 CC

 

19945번: 새로운 언어 CC

C언어는 int형 변수를 32개의 bit를 이용하여 2의 보수 방식을 따라서 이진수의 형태로 저장한다. 즉, 정수 10은 0000 0000 0000 0000 0000 0000 0000 1010으로 저장된다. 하지만 세상을 뒤흔들 새로운 언어 CC�

www.acmicpc.net

 

 

from sys import stdin
input = stdin.readline

N = int(input())

t = [1]*66

for i in range(64):
    for j in range(65):
        t[j] *= 2
        if i==j:
            t[j] -= 1

for i in range(65):
    if t[i] == N:
        print(i+1)

 

C 2의 제곱수 계산하기

 

19946번: 2의 제곱수 계산하기

263 = 9,223,372,036,854,775,808 까지는 계산을 잘 하다가 264를 264-1인 18,446,744,073,709,551,615로 계산을 잘못해버렸다. 

www.acmicpc.net

 

 

from sys import stdin
from math import floor
input = stdin.readline

h, y = map(int, input().split())
r = [h, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

for i in range(1, y + 1):
    r[i] = max(r[i], floor(r[i - 1] * 1.05))
    if i >= 3:
        r[i] = max(r[i], floor(r[i - 3] * 1.20))
    if i >= 5:
        r[i] = max(r[i], floor(r[i - 5] * 1.35))
print(r[y])

 

D 투자의 귀재 배주형

 

19947번: 투자의 귀재 배주형

2020년에 학교로 복학한 주형이는 월세를 마련하기 위해서 군 적금을 깨고 복리 투자를 하려고 한다. 주형이가 하려는 투자에는 3가지 방법의 투자 방식이 있다.  1년마다 5%의 이율을 얻는 투자 (

www.acmicpc.net

 

 

from sys import stdin
input = stdin.readline

good = True
content = input().rstrip()
space = int(input())
key = list(map(int, input().split()))
title = ""

for c in content.split():
    title += c[0].upper()

content += title


if key[ord(content[0].upper()) - 65] >= 1:
    key[ord(content[0].upper()) - 65] -= 1
else:
    good = False

for i, c in enumerate(content):
    if not good: break
    if i == 0: continue
    if c == " ":
        if content[i-1] == " ":
            continue
        if space >= 1:
            space -= 1
        else:
            good = False
        continue
    if content[i-1]==content[i]: continue
    if key[ord(c.upper()) - 65] >= 1:
        key[ord(c.upper()) - 65] -= 1
    else:
        good = False

if good:
    print(title)
else:
    print(-1)

 

E 음유시인 영재

 

19948번: 음유시인 영재

감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다. 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다! 시는 대문자, 소��

www.acmicpc.net

 

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef tuple<int, int, int> tup;

ll res, t;

int s[10];
int yj[10];

void dfs(int depth) {
	if (depth == 10) {
		res += (t >= 5); return;
	}
	for (int i = 1; i <= 5; ++i) {
		if (depth >= 2 && i == yj[depth - 1] && i == yj[depth - 2]) continue;
		yj[depth] = i;
		if (i == s[depth]) t++;
		dfs(depth + 1);
		if (i == s[depth]) t--;
	}
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	for (int i = 0; i < 10; ++i) cin >> s[i];
	for (int i = 1; i <= 5; ++i) {
		yj[0] = i;
		if (i == s[0]) t++;
		dfs(1);
		if (i == s[0]) t--;
	}
	cout << res;

	return 0;
}

 

F 영재의 시험

 

19949번: 영재의 시험

컴퓨터공학과 학생인 영재는 이번 학기에 알고리즘 수업을 수강한다. 평소에 자신의 실력을 맹신한 영재는 시험 전날까지 공부를 하지 않았다. 당연하게도 문제를 하나도 풀지 못하였지만 다행

www.acmicpc.net

 

 

from sys import stdin
from decimal import Decimal as D
input = stdin.readline

x1, y1, z1, x2, y2, z2 = map(D, input().split())
d = ((x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2).sqrt()
N = int(input())
s = list(map(D, input().split()))

M = max(d, max(s))
R = d + sum(s) - M

if M <= R:
    print("YES")
else:
    print("NO")

 

3차원 막대기 연결하기

 

19950번: 3차원 막대기 연결하기

첫 줄에 좌표계의 시작점(X1, Y1, Z1)과 끝점(X2, Y2, Z2)이 주어진다. 둘째 줄에 막대기의 개수 N이 주어진다. 셋째 줄부터 N개의 막대기의 길이를 의미하는 정수 K가 주어진다.

www.acmicpc.net

 

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef tuple<int, int, int> tup;

int N, M, z;
ll c[100001];
ll H[100001];

int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	cin >> N >> M;
	for (int i = 0; i < N; ++i) cin >> H[i];

	for (int i = 0; i < M; ++i) {
		int a, b, k; cin >> a >> b >> k; a--;
		c[a] += k; c[b] -= k;
	}

	for (int i = 0; i < N; ++i) {
		z += c[i];
		cout << H[i] + z << " ";
	}

	return 0;
}

 

H 태상이의 훈련소 생활

 

19951번: 태상이의 훈련소 생활

2020년 5월 14일 논산훈련소에 입대한 태상이는 첫 총기 훈련에서 가스 조절기를 잃어버리는 중대한 실수를 범했다. 그로 인해, 태상이는 조교들에게 눈총을 받게 되었다. 조교들은 태상이에게 연

www.acmicpc.net

 

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef tuple<int, int, int> tup;

int R, C;
int O, F, r1, c1, r2, c2;

bool visit[101][101];
int board[101][101];

bool bfs(int row, int col, int f) {
	queue<tup> Q;
	Q.push({ row, col, f });
	while (!Q.empty()) {
		int cr, cc, cf;
		tie(cr, cc, cf) = Q.front(); Q.pop();
		if (cr == r2 && cc == c2) return true;
		if (cf == 0) continue;
		for (int i = 0; i < 4; ++i) {
			int nr = cr, nc = cc, nf = cf;
			if (i == 0) nc++; if (i == 1) nc--; if (i == 2) nr++; if (i == 3) nr--;
			if (nr <= 0 || nc <= 0 || nr > R || nc > C) continue;
			if (board[nr][nc] - board[cr][cc] > nf) continue;
			if (visit[nr][nc]) continue;
			visit[nr][nc] = true;
			Q.push({ nr, nc, nf - 1 });
		}
	}
	return false;
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	int TEST; cin >> TEST; while (TEST--) {

		cin >> R >> C >> O >> F >> r1 >> c1 >> r2 >> c2;
		for (int r = 0; r <= R; ++r) for (int c = 0; c <= C; ++c) {
			board[r][c] = 0;
			visit[r][c] = false;
		}

		for (int o = 0; o < O; ++o) {
			int r, c, l; cin >> r >> c >> l; board[r][c] = l;
		}

		cout << (bfs(r1, c1, F) ? "잘했어!!" : "인성 문제있어??") << "\n";

	}

	return 0;
}

 

I 인성 문제 있어??

 

19952번: 인성 문제 있어??

인성이는 인싸가 되기 위해서 인싸트 특별과정에 참가했다. 훈련 첫날 인성이는 험난한 미로에서 목적지에 도달해야 하는 훈련을 받고 있다. 제한 시간 안에 미로를 통과하지 못하면 명기 교관

www.acmicpc.net

 

 

from sys import stdin
input = stdin.readline

v, m, t = map(int, input().split())
x, y = 0, 0

d = [0] * 4

for i in range(min(t, 8)):
    if i%4 == 0: y += v
    if i%4 == 1: x += v
    if i%4 == 2: y -= v
    if i%4 == 3: x -= v
    if i >= 4:
        d[i%4] = v
    v = (v * m) % 10

if t <= 8:
    print(x, y)
else:
    u = t - 8 - t%4;
    y += (d[0] - d[2]) * u//4
    x += (d[1] - d[3]) * u//4
    for i in range(t%4):
        if i == 0: y += d[0]
        if i == 1: x += d[1]
        if i == 2: y -= d[2]

    print(x, y)

 

J 영재의 산책

 

 

A 1분 (FS) - B 5분 - C 9분 (FS) - D 41분 - E 44분 (FS) - H 113분 - I 118분 (FS) - F 134분 - G 151분 (FS) - J 212분

 

 

 

10문제 풀었다.

 

너무 많이 틀렸다.. 핑계를 대자면 예제가 전혀 도움이 되질 않았다.

 

제출 전 검증을 더 하는 습관을 들여야겠다.





댓글