더 지니어스 2기 롤브레이커 1화 (룰 변형)
- 동물의 호구왕국

=== 플레이어 수 ===
플레이어 : 5-7명
사회자 : 1명

=== 게임 진행 ===
1. 각 플레이어는 랜덤으로 동물을 선택한다.

2. 플레이어는 이동할 필드를 선택한다.
(이동할 필드는 각 플레이어가 딜러에게 1대1로 알려주며 모든 플레이어가 선택한 후에 이동을 한다.)

3. 플레이어는 선택한 동물의 스킬을 사용하여 포인트를 획득한다.
그리고 모든 플레이어는 같은 필드의 플레이어 하나를 포식을 해도 되고 안해도 된다.
(스킬은 각 플레이어가 딜러에게 1대1로 알려주며 모든 플레이어가 스킬을 사용한 후에 포인트 계산을 한다.)

4. 모든 플레이어의 스킬 사용이 완료되면 각 동물이 획득한 포인트를 공개한다.
(각 라운드의 플레이어의 이동과 공개 되는 동물들의 포인트로 상대 플레이어의 동물을 예측해야 한다.)

5. 2~4를 반복하여, 4라운드에서 포인트가 가장 많은 플레이어가 승리한다.

==== 필드와 동물 ====
필드는 3종, 동물은 7종이며 각 동물은 자신만의 서식지가 존재한다.

숲 : 카멜레온, 까마귀
들 : 사자, 하이에나
강 : 악어, 독뱀
서식지 없음 : 고라니

===== 포인트 획득법 =====
각 라운드마다 포인트가 정해져 있고 각 동물은 스킬을 사용하여 라운드의 포인트를 획득한다. 단 필드 이동시에 자신의 서식지가 아닌 곳으로 이동했다면 다음 라운드에서 자신의 서식지로 이동을 해야 다은 라운드에서 포인트 획득이 가능하다.

1. 사자, 악어 - 포식자
사자, 악어는 같은 필드에 있는 플레이어 중 한 명을 포식했을 때, 그 플레이어가 "피식자"라면 포인트를 획득한다.

• 피식자 = {까마귀, 하이에나, 카멜레온, 고라니}
* 피식자는 포식자에게 포식을 당하면 그 라운드에서 포인트를 절반만 획득할 수 있다.

2. 독뱀 - 중립자
독뱀은 "포식을 당할 경우"에 포인트를 획득한다. 또한 같은 필드에 있는 플레이어 중 한 명을 포식했을 때, 그 플레이어가 "포식자"라면 포인트를 획득한다.

3. 하이에나
같은 필드에 있는 플레이어 중 한 명을 선택한다. 그 플레이어가 포인트를 획득 조건이 갖춰지면 대신 포인트를 획득한 다. 선택된 플레이어는 포인트를 획득할 수 없다.


4. 까마귀
매 라운드마다 한명의 플레이어의 동물을 예측해서 맞추면 포인트를 획득한다. 플레이어를 중복되게 선택할 수 없다.

5. 카멜레온
게임 시작 전, 각 라운드에 변신할 동물을 중복되지 않게 선택해서 플레이한다. 단 그 동물의 스킬만 갖어올 뿐, 피식자의 특징은 변하지 않는다.


6. 고라니
고라니는 서식지가 존재하지 않으며 자유롭게 필드 이동이 가능하다. 포식당하지 않는 라운드에서 점수를 획득한다.


==== 라운드 당 획득 가능 포인트 ====
1라운드 : 1
2라운드 : 2
3라운드 : 2.2
4라운드 : 3.3

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

 

10797번: 10부제

서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 �

www.acmicpc.net

문제

서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한다.

여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 5대의 자동차 번호의 일의 자리 숫자가 주어졌을 때 위반하는 자동차의 대수를 출력하면 된다.

입력

첫 줄에는 날짜의 일의 자리 숫자가 주어지고 두 번째 줄에는 5대의 자동차 번호의 일의 자리 숫자가 주어진다. 날짜와 자동차의 일의 자리 숫자는 모두 0에서 9까지의 정수 중 하나이다. 

출력

주어진 날짜와 자동차의 일의 자리 숫자를 보고 10부제를 위반하는 차량의 대수를 출력한다.

소스코드 - 파이썬

import sys
input = sys.stdin.readline

d = int(input())
cars = map(int, input().split())
answer = 0
for c in cars:
    if c == d:
        answer += 1
print(answer)

소스코드 - C++

#include <cstdio>
using namespace std; 

int main(int argc, char** argv) 
{
    int d, car, i;
    int cnt = 0;
    scanf("%d", &d);
    
    for(i=0; i<5; i++) {
        scanf("%d", &car);
        if (d == car) {
            cnt++;
        }
    }
    printf("%d", cnt);
}

소스코드 - Java

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i, cnt = 0;
        for(i=0; i<5; i++) {
            if(n == sc.nextInt()) {
                cnt++;
            }
        }
        System.out.println(cnt);
    }
}

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

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

해결방안

1. 각 K번째 줄에 대해 다음과 같은 출력을 정의한다.

2. 1 ~ N-1번째 줄에는 별을 (N-K)*2+1개 출력한다.

3. N번째 줄에는 별을 1개 출력한다.

4. N+1 ~ 2N-1번째 줄에는 별을 (K-N)*2+1개 출력한다.

2. 모든 출력은 2*N-1개의 길이를 갖은 문자열 중앙정렬로 출력한다.

소스코드 - 파이썬

import sys
input = sys.stdin.readline

# k : star, n : max_len
def midStar(k, n):
    blank = " "
    star = "*"
    stars = star * k
    blanks = blank * ((n-k)//2)
    return blanks + stars

def printStars(n):
    l = 2*n-1
    for k in range(1,l+1):
        if k == n:
            s = midStar(1, l)
        elif k < n:
            s = midStar((n-k)*2+1, l)
        elif k > n:
            s = midStar((k-n)*2+1, l)
        print(s)

N = int(input())
printStars(N)

소스코드 - C++

#include <cstdio>
#include <string>
#include <iostream>
using namespace std;

string midStar(int k, int n) {
    string blank = " ";
    string star = "*";
    string stars = "";
    int blank_n = (n-k)/2;
    int star_n = k;
    int i;
    for (i=0; i<blank_n; i++) {
        stars.append(blank);
    }
    for (i=0; i<star_n; i++) {
        stars.append(star);
    }
    return stars;
}

int main() {
    int n, k;
    string s;
    scanf("%d", &n);
    
    int l = 2*n-1;
    for(k=1; k<l+1; k++) {
        if (k == n) {
            s = midStar(1, l);
        } else if (k < n) {
            s = midStar((n-k)*2+1, l);
        } else if (k > n) {
            s = midStar((k-n)*2+1, l);
        }
        cout << s << endl;
    }
}

소스코드 - Java

import java.util.*;

public class Main {
    public static String midStar(int k, int n) {
        String blank = new String(" ");
        String star = new String("*");
        String stars = new String("");
        int blank_n = (n-k)/2;
        int star_n = k;
        int i;
        for (i=0; i<blank_n; i++) {
            stars += blank;
        }
        for (i=0; i<star_n; i++) {
            stars += star;
        }
        return stars;
    }    
    
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int l = 2*n-1;
        int k;
        String s = new String("");
        for (k=1; k<l+1; k++) {
            if (k == n) {
                s = midStar(1, l);
            } else if (k < n) {
                s = midStar((n-k)*2+1, l);
            } else if (k > n) {
                s = midStar((k-n)*2+1, l);
            }
            System.out.println(s);
        }
    }
}

+ Recent posts