20200228 알고리즘

1. 자릿수의 합

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 각 자연수의 자릿수의 합을 구하는 함수를 def digit_sum(x)를 꼭 작성해서 프로그래밍 하세요.

▣ 입력설명 첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.

▣ 출력설명 자릿수의 합이 최대인 자연수를 출력한다.

▣ 입력예제 1

3 125 15232 97

▣ 출력예제 1

97

Solution

import sys
sys.stdin = open("input6.txt", "rt")
n = int(input())
numbers = list(map(int, input().split()))
max = -2147000000
res = 0

def digit_sum(x):
    sum = 0
    while x > 0:
        sum += x % 10
        x = x // 10
    return sum


for number in numbers:
    total = digit_sum(number)
    if max < total:
        max = total
        res = number

print(number)

2. 소수(에라토스테네스 체)

자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 제한시간은 1초입니다.

▣ 입력설명 첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.

▣ 출력설명 첫 줄에 소수의 개수를 출력합니다.

▣ 입력예제 1

20

▣ 출력예제 1

8

Solution

import sys
sys.stdin = open("input7.txt", "rt")

n = int(input())
a = [0] * (n+1)
cnt = 0

for i in range(2, n+1):
    if a[i] == 0:
        cnt += 1
    for j in range(i, n+1, i):
        a[j] = 1

print(cnt)

3 . 뒤집은 소수

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하 여 프로그래밍 한다.

▣ 입력설명 첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 100,000를 넘지 않는다.

▣ 출력설명 첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

▣ 입력예제 1 5 32 55 62 3700 250

▣ 출력예제 1

23 73

Solution

import sys
sys.stdin = open("input8.txt", "rt")
n = int(input())
numbers = list(map(int, input().split()))

def reverse(x):
    res = 0
    while x > 0:
        t = x % 10
        res = res*10 + t
        x = x // 10
    return res

def isPrime(x):
    if x == 1:
        return False
    for a in range(2, x//2+1):
        if x % a == 0:
            return False
    else:
        return True

for a in numbers:
    rev = reverse(a)
    if isPrime(rev):
        print(rev, end=' ')

4. 주사위 게임

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게 임이 있다.

규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)1,000원의 상금을 받게 된다. 규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)100원의 상금을 받게 된다. 규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)*100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3100으로 계산되어 1,300원을 받게 된 다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+21,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6*100으로 계산되어 600원을 상금 으로 받게 된다.

N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램 을 작성하시오

▣ 입력설명 첫째 줄에는 참여하는 사람 수 N(2<=N<=1,000)이 주어지고 그 다음 줄부터 N개의 줄에 사람 들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

▣ 출력설명 첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다.

▣ 입력예제 1

3

3 3 6

2 2 2

6 2 5

▣ 출력예제 1

12000

Solution

import sys
sys.stdin = open("input9.txt", "rt")

n = int(input())
max = -2147000000

def calculate(args):
    a, b, c = args
    if a == b and b == c:
        money = 10000 + a * 1000
    elif a == b or a == c:
        money = 1000 + a * 100
    elif b == c:
        money = 1000 + b * 100
    else:
        money = c * 100
    return money

for i in range(n):
    tmp = list(map(int, input().split()))
    tmp.sort()
    _money = calculate(tmp)
    if _money > max:
        max = _money

print(max)

5. 점수 계산

OX 문제는 맞거나 틀린 두 경우의 답을 가지는 문제를 말한다. 여러 개의 OX 문제로 만들어진 시험에서 연속적으로 답을 맞히는 경우에는 가산점을 주기 위해서 다음과 같이 점수 계산을 하기 로 하였다. 1번 문제가 맞는 경우에는 1점으로 계산한다. 앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다. 또한, 연속으로 문제의 답이 맞는 경우에서 두 번째 문제는 2점, 세 번째 문제는 3점, …, K번째 문제는 K점으로 계산한다. 틀린 문제는 0점으로 계 산한다.

예를 들어, 아래와 같이 10 개의 OX 문제에서 답이 맞은 문제의 경우에는 1로 표시하고, 틀린 경 우에는 0으로 표시하였을 때, 점수 계산은 아래 표와 같이 계산되어, 총 점수는 1+1+2+3+1+2=10 점이다.

1011100110

채점 1 0 1 1 1 0 0 1 1 0

점수 1 0 1 2 3 0 0 1 2 0

시험문제의 채점 결과가 주어졌을 때, 총 점수를 계산하는 프로그램을 작성하시오.

▣ 입력설명 첫째 줄에 문제의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 N개 문제의 채점 결과를 나 타내는 0 혹은 1이 빈 칸을 사이에 두고 주어진다. 0은 문제의 답이 틀린 경우이고, 1은 문제의 답이 맞는 경우이다.

▣ 출력설명 첫째 줄에 입력에서 주어진 채점 결과에 대하여 가산점을 고려한 총 점수를 출력한다.

▣ 입력예제 1 10

1 0 1 1 1 0 0 1 1 0

▣ 출력예제 1

10

Solution

import sys
sys.stdin = open("input10.txt", "rt")
n = int(input())
answers = list(map(int, input().split()))
cnt = 0
res = 0

for i in range(n):
    if answers[i] == 1:
        cnt += 1
        res += cnt
    else:
        cnt = 0

print(res)

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook