728x90

(1) 문제

  • 조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.

  • 이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
  • 조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

(2) 입력

  • 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
  • 한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.

(3) 출력

  • 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

 


(4) 예제 입력 및 출력


(5) 코드

import sys
import math

length = int(sys.stdin.readline())

def able_to_exist_count(x1, x2, y1, y2, r1, r2):
    distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) **2)

    if x1 == x2 and y1 == y2 and r1 == r2:
        return -1

    if distance > r1 + r2:
        return 0
    elif distance == r1 + r2:
        return 1
    elif distance < r1 + r2 and distance + min(r1, r2) == max(r1, r2):
        return 1
    elif distance < r1 + r2 and distance + min(r1, r2) > max(r1, r2):
        return 2
    else:
        return 0



for i in range(length):
    input_list = list(map(int, sys.stdin.readline().split()))
    
    x1 = input_list[0]
    x2 = input_list[3]

    y1 = input_list[1]
    y2 = input_list[4]

    r1 = input_list[2]
    r2 = input_list[5]

    print(able_to_exist_count(x1, x2, y1, y2, r1, r2))

(6) 실행결과


반응형
728x90

(1) 문제

  • 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.

  • 예를 들어 <그림 2>와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.

  • 계단 오르는 데는 다음과 같은 규칙이 있다.
    1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
    2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
    3. 마지막 도착 계단은 반드시 밟아야 한다.
  • 따라서 첫 번째 계단을 밟고 이어 두 번째 계단이나, 세 번째 계단으로 오를 수 있다. 하지만, 첫 번째 계단을 밟고 이어 네 번째 계단으로 올라가거나, 첫 번째, 두 번째, 세 번째 계단을 연속해서 모두 밟을 수는 없다.

각 계단에 쓰여 있는 점수가 주어질 때 이 게임에서 얻을 수 있는 총 점수의 최댓값을 구하는 프로그램을 작성하시오.

 


(2) 입력

  • 입력의 첫째 줄에 계단의 개수가 주어진다.
  • 둘째 줄부터 한 줄에 하나씩 제일 아래에 놓인 계단부터 순서대로 각 계단에 쓰여 있는 점수가 주어진다. 계단의 개수는 300이하의 자연수이고, 계단에 쓰여 있는 점수는 10,000이하의 자연수이다.

 


(3) 출력

  • 첫째 줄에 계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 출력한다.

(4) 예제 입력 및 출력


(5) 코드

import sys

length = int(sys.stdin.readline())

stair_score = []

for _ in range(length):
    stair_score.append(int(sys.stdin.readline()))

dp = []
if len(stair_score) > 2:
    dp.append(stair_score[0])
    dp.append(stair_score[0] + stair_score[1])
    dp.append(max(stair_score[0] + stair_score[2], stair_score[1] + stair_score[2]))

    for i in range(3,length): 
        dp.append(max(dp[i-2] + stair_score[i] , dp[i-3] + stair_score[i] + stair_score[i - 1]))

if len(stair_score) == 0:
    print(-1)
elif len(stair_score) == 1:
    print(stair_score[0])
elif len(stair_score) == 2:
    print(stair_score[0] + stair_score[1])
else:
    print(dp[-1])

(6) 실행결과


반응형
728x90

(1) 문제

  • 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
    • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
    • 고른 수열은 오름차순이어야 한다.

(2) 입력

  • 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

 


(3) 출력

  • 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
  • 수열은 사전 순으로 증가하는 순서로 출력해야 한다.

 


(4) 예제 입력 및 출력


(5) 코드

import itertools
import sys
N, M = map(int,sys.stdin.readline().split())

N_list = []
for i in range(N):
    N_list.append(str(i + 1))

for i in list(map(' '.join, itertools.combinations(N_list, M))):
    print(i)

(6) 실행결과


반응형

+ Recent posts