문제

점수계산


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


 1 0 1 1 1 0 0 1 1 0

 


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


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


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


▣ 입력예제 1
10
1 0 1 1 1 0 0 1 1 0


▣ 출력예제 1
10

 


내 풀이

# 내 풀이
n = int(input())
a = list(map(int, input().split()))
sum = 0
cnt = 1
for i in range(n):
    if a[i] == 1 :
        #print(i+1, "번쨰 점수 더할 cnt 는", cnt)
        sum += cnt
        cnt += 1

    else:
        cnt = 1
        #print(i+1, "번쨰 점수 cnt 는", cnt)
print(sum)

점수


강사님 풀이

# 강사님 풀이
n = int(input())
a = list(map(int, input().split()))

sum = 0
cnt = 0
for x in a:
    if x == 1:
        cnt += 1
        sum += cnt
    else:
        cnt = 0
print(sum)

문제

주사위 게임


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


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


예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3*100으로 계산되어 1,300원을 받게 된
다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2*1,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


내 풀이

# 내 풀이
n = int(input())
maxNum = 0
for i in range(n):
    arr = list(map(int,input().split()))
    prize_money = 0

    if arr[0] == arr[1]:
        num = arr[0]
        if arr[1] == arr[2]:
            prize_money = 10000 + num * 1000
        else:
            prize_money = 1000 + num * 100
    elif arr[1] == arr[2]:
        num = arr[1]
        if arr[1] == arr[0]:
            prize_money = 10000 + num * 1000
        else:
             prize_money = 1000 + num * 100           
    elif arr[2] == arr[0]:
        num = arr[2]
        if arr[2] == arr[1]:
            prize_money = 10000 + num * 1000
        else:
            prize_money = 1000 + num * 100
    else:
        prize_money = max(arr) * 100
    #print(prize_money)
    if prize_money > maxNum:
        maxNum = prize_money
print(maxNum)

점수


강사님 풀이

# 강사님 풀이
n = int(input())
res = 0
for i in range(n):
    tmp = input().split() # 문자형으로, ['1', '2', '3'] 저장
    tmp.sort() # 눈이 다르면 큰수 찾아야하므로 정렬
    a, b, c = map(int, tmp) # c 가 가장 큰 수
    #print(a, b, c)
    if a == b and b == c: # 가장 좋은 조건을 가장 먼저 if 로 씀
        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
    if money > res:
        res = money
print(res)

# 가장 좋은 조건을 먼저 if 로 작성

# a == b 와 a ==  c 일땐 공통인 값은 a 로 쓰면 되고 , b == c 일땐 공통인 값은 b 로 쓰면 되므로 두 경우를 따로 작성


문제

뒤집은 소수
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


내 풀이

# 내 풀이
def reverse(x):
    sum = 0
    mul = 100000
    while x > 0:
        mul /= 10
        sum += x % 10 * mul
        x = x // 10
    return int(sum/mul)

def isPrime(x):
    if x == 1:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

n = input()
nums = list(map(int, input().split()))

for x in nums:
    rev = reverse(x)
    if isPrime(rev):
        print(rev, end=" ")

점수


강사님 풀이

# 강사님 풀이
n = input()
a = 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 i in range(2, x//2 + 1): # + 1 해줘야 절반'까지' 돈다
        if x % i == 0:
            return False
    else:
        return True

for x in a:
    tmp = reverse(x)
    if isPrime(tmp):
        print(tmp, end=" ")

<reverse>
# 125 % 10 == 5 끝자리 구해짐

# res = res * 10 + 끝자리 를 반복하면 한자리씩 올라가면서 누적된다

 

<isPrime>

# 16 에서 1, 16 을 제외한 약수는 8 까지 존재한다
# 16 의 약수 : 1 2 4 8 16
# 그러므로 절반인 8 까지만 돌면 그 뒤로는 자신을 제외한  약수가 없다
# 즉 8 까지 나눠지는 수가 없으면 소수이다

+ Recent posts