대회 정보: https://www.acmicpc.net/contest/view/303
문제 목록: 추가 예정

출제 및 검수 : jh05013, junie, messi, wookje

문제 A B C D E
출제자 wookje junie jh05013 jh05013 wookje

A. 엔드게임 스포일러

풀이

0000 : 엔드게임 스포일러

문제 지문 내에 정답의 영문 표기가 적혀 있으므로 출력하면 된다.

코드

#include <cstdio>
int main(){
    puts("Avengers: Endgame");
    return 0;
}

B. 귀여운 수~ε٩(๑> ₃ <)۶з

풀이

0000 : 귀여운 수~ε٩(๑> ₃ <)۶з

주어진 정수의 각 자릿수가 등차수열을 이루는지 판별하면 된다.

코드

#include <bits/stdc++.h>
using namespace std;

string n;

int main() {
    cin >> n;
    for (int i=2; i<n.size(); i++) {
        if (n[i] - n[i-1] != n[i-1] - n[i-2]) {
            cout << "흥칫뿡!! <( ̄ ﹌  ̄)>";
            return 0;
        }
    }
    cout << "◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!";
    return 0;
}
#coding: utf-8
s = list(map(int,input()))
if len(s) == 1:
    print("◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!")
    exit()

d = s[1] - s[0]
for i in range(len(s)-1):
    if s[i]+d != s[i+1]: print("흥칫뿡!! <( ̄ ﹌  ̄)>"); break
else: print("◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!")

C. 맥주 99병

풀이

0000 : 맥주 99병

주어진 규칙에 맞게 문자열을 출력하면 된다.

N=1인 경우의 예외에 주의하자.

코드

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
	cin >> n;
	for (int i = n; i >= 3; i--) {
		cout << i << " bottles of beer on the wall, " << i << " bottles of beer.\n";
		cout << "Take one down and pass it around, " << i-1 << " bottles of beer on the wall.\n\n";
	}
	if (n >= 2) {
		cout << "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n";
	}
	if (n >= 1) {
		cout << "1 bottle of beer on the wall, 1 bottle of beer.\nTake one down and pass it around, no more bottles of beer on the wall.\n\n";
	}
	if (n != 1) {
		cout << "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, " << n << " bottles of beer on the wall.";
	}
	else {
		cout << "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, " << n << " bottle of beer on the wall.";
	}
	return 0;
}
c = lambda n: str(n) if n else "no more"
s = lambda n: '' if n==1 else 's'

n = int(input())
for i in range(n, 0, -1):
    print(f"{c(i).capitalize()} bottle{s(i)} of beer on the wall, {c(i)} bottle{s(i)} of beer.")
    print(f"Take one down and pass it around, {c(i-1)} bottle{s(i-1)} of beer on the wall.")
    print()
print("No more bottles of beer on the wall, no more bottles of beer.")
print(f"Go to the store and buy some more, {c(n)} bottle{s(n)} of beer on the wall.")

D. But can you do it in 0.5x A presses?

풀이

0000 : But can you do it in 0.5x A presses?

test

코드

#include <bits/stdc++.h>
using namespace std;

int n, dap;

int main() {
	cin >> n;
	for (int i = 0, flag = 0; i < n; i++) {
		double x; cin >> x;
		dap += (int)x;
		flag += (x != 0);
		if (flag == 1 && (int)(x*10)%10 == 5) dap++;
	}
	cout << dap;
	return 0;
}
n = int(input())
L = [round(float(x)*10) for x in input().split() if x != '0'] + [0]
print((L[0]+5)//10 + sum(x//10 for x in L[1:]))

E. Messi Gimossi

풀이

0000 : Messi Gimossi

test

코드

#include <bits/stdc++.h>
using namespace std;
int n, m;
int f[44] = { 0,5,13 };
string s = "Messi Gimossi";
int main() {
	cin >> m; m--;
	int a = 1, b = 1, c;
	for (int i = 3; i <= 40; i++) {
		f[i] = f[i-1]+f[i-2]+1;
	}
	for (int i = 40; i >= 2; i--) {
		if (m >= f[i]) m -= (f[i]+1);
	}
	if (m == 5 || m == -1) cout << "Messi Messi Gimossi";
	else cout << s[m];
	return 0;
}
lens = [5, 13]
while lens[-1] <= 2**30: lens.append(lens[-1]+lens[-2]+1)

def messi(m, depth):
    if depth <= 1: return "Messi Gimossi"[m]
    if lens[depth-1] > m: return messi(m, depth-1)
    m-= lens[depth-1]
    if m == 0: return ' '
    m-= 1
    return messi(m, depth-2)

c = messi(int(input())-1, 39)
print(c if c != ' ' else "Messi Messi Gimossi")

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, wookje, 욱제, 메시, messi, 풀이, 선린, 선린인터넷고등학교, sunrin, 문제 풀이, 제3회 천하제일 코딩대회, 예선

wookje.kwon's profile image

wookje.kwon

2019-06-19 19:30

Read more posts by this author