728x90

BOJ 2506 점수계산

문제

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
점수 1 0 1 2 3 0 0 1 2 0
시험문제의 채점 결과가 주어졌을 때, 총 점수를 계산하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

첫째 줄에 문제의 개수 N (1 ≤ N ≤ 100)이 주어진다.

둘째 줄에는 N개 문제의 채점 결과를 나타내는 0 혹은 1이 빈 칸을 사이에 두고 주어진다. 

0은 문제의 답이 틀린 경우이고, 1은 문제의 답이 맞는 경우이다.

출력 

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

예제 입력 1

10
1 0 1 1 1 0 0 1 1 0

예제 출력 1

10

풀이

# boj 2506 점수계산

n = int(input())
sum = 0
res = 0
k = list(map(int, input().split()))

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

print(res)

 

728x90
728x90

BOJ 15894 수학은 체육과목 입니다

문제

성원이는 수학을 정말 못 하는 고등학생이다. 

수학을 못하는 대신 근성과 팔 힘이 뛰어난 성원이는 수학 시험에서 수학 지식을 사용하지 않고 근성과 체력을 사용해 문제를 푼다. 

지난 시험에서는 아래 사진에 나와있는 문제를 근성과 체력을 사용해 열심히 풀었지만 사진에서 볼 수 있듯이 틀려버리고 말았다!

결국 이 문제는 틀려버렸지만 성원이는 여전히 자신의 체력에 강한 자신감을 갖고 있다. 

어떤 어려운 문제가 나와도 이런 식으로 근성과 체력을 사용하면 다 풀 수 있으니 이 방법은 최고의 방법이라고 생각하고 있다.

성원이의 친구 형석이는 근성과 체력으로 수학 문제를 푸는 것은 굉장히 무식한 방법이라고 생각한다.

형석이는 수학을 공부하면 문제를 훨씬 빨리 풀 수 있다는 것을 알려주기 위해 위 사진에 나와있는 문제를 갖고 성원이와 퀴즈 내기를 하기로 했다. 

위 사진의 문제를 다시 정리하면 아래와 같다.

"한 변의 길이가 1인 정사각형을 아래 그림과 같이 겹치지 않게 빈틈없이 계속 붙여 나간다. 

가장 아랫부분의 정사각형이 n개가 되었을 때, 실선으로 이루어진 도형의 둘레의 길이를 구하시오."

가장 아랫부분의 정사각형 개수가 주어지면 그에 해당하는 답을 출력하는 프로그램을 만들어 형석이를 도와주자!

시간 제한 : 1 초(추가 시간 없음)
메모리 제한 : 512 MB

입력

첫 번째 줄에 가장 아랫부분의 정사각형 개수 n이 주어진다. (1 ≤ n ≤ 109)

출력

첫 번째 줄에 형석이가 말해야 하는 답을 출력한다.

예제 입력 1

1

예제 출력 1

4

예제 입력 2

3

예제 출력 2

12

풀이

# boj 15894 수학은 체육과목 입니다

n = int(input())
print(4 * n)
728x90
728x90

BOJ 16394 홍익대학교

문제

홍익대학교는 1946년에 개교하였다.

특정 년도가 주어졌을 때, 그 해가 개교 몇 주년인지 출력하라.

단, 홍익대학교는 없어지지 않는다고 가정한다.

문제는 C, C++, JAVA 또는 Python3을 이용하여 해결한다.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

입력으로 첫 줄에 특정 년도를 알리는 정수 N이 주어진다.

정수 N은 1,946 부터 1,000,000 사이의 값이다. (1,946 ≤ N ≤ 1,000,000)

출력

출력으로 홍익대학교의 개교 주년을 나타내는 정수를 출력한다.

예제 입력 1

2018

예제 출력 1

72

풀이

# boj 16394 홍익대학교

n = int(input())
print(n - 1946)
728x90
728x90

BOJ 5532 방학 숙제

문제

상근이는 초등학교에 다닐 때, 방학 숙제를 남들보다 먼저 미리 하고 남은 기간을 놀았다.

방학 숙제는 수학과 국어 문제 풀기이다.

방학은 총 L일이다. 수학은 총 B페이지, 국어는 총 A페이지를 풀어야 한다. 

상근이는 하루에 국어를 최대 C페이지, 수학을 최대 D페이지 풀 수 있다.

상근이가 겨울 방학동안 숙제를 하지 않고 놀 수 있는 최대 날의 수를 구하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

한 줄에 하나씩 총 다섯 줄에 걸쳐 L, A, B, C, D가 주어진다. (2 ≤ L ≤ 40, 1 ≤ A, B ≤ 1000, 1 ≤ C, D ≤ 100)

항상 방학 숙제를 방학 기간내에 다 할 수 있는 경우만 입력으로 주어진다.

출력

첫째 줄에 상근이가 놀 수 있는 날의 최댓값을 출력한다.

예제 입력 1

20
25
30
6
8

예제 출력 1

15

예제 입력 2

15
32
48
4
6

예제 출력 2

7

풀이

# boj 5532 방학 숙제
import math

l = int(input())
a = int(input())
b = int(input())
c = int(input())
d = int(input())
k = math.ceil(a / c)
m = math.ceil(b / d)

print(l - max(k, m))
728x90
728x90

BOJ 2460 지능형 기차 2

문제

최근에 개발된 지능형 기차가 1번역(출발역)부터 10번역(종착역)까지 10개의 정차역이 있는 노선에서 운행되고 있다. 

이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 

이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 

단, 이 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다.
  내린 사람 수  탄 사람 수
1번역(출발역) 0 32
2번역 3 13
3번역 28 25
4번역 17 5
5번역 21 20
6번역 11 0
7번역 12 12
8번역 4 2
9번역 0 8
10번역 21 0
예를 들어, 위와 같은 경우를 살펴보자.

이 경우, 기차 안에 사람이 가장 많은 때는 2번역에서 3명의 사람이 기차에서 내리고,

13명의 사람이 기차에 탔을 때로, 총 42명의 사람이 기차 안에 있다.

이 기차는 다음 조건을 만족하면서 운행된다고 가정한다.

기차는 역 번호 순서대로 운행한다.
출발역에서 내린 사람 수와 종착역에서 탄 사람 수는 0이다.
각 역에서 현재 기차에 있는 사람보다 더 많은 사람이 내리는 경우는 없다.
기차의 정원은 최대 10,000명이고, 정원을 초과하여 타는 경우는 없다.

10개의 역에 대해 기차에서 내린 사람 수와 탄 사람 수가 주어졌을 때, 

기차에 사람이 가장 많을 때의 사람 수를 계산하는 프로그램을 작성하시오.

시간 제한 : 1 초 
메모리 제한 : 128 MB

입력

각 역에서 내린 사람 수와 탄 사람 수가 빈칸을 사이에 두고 첫째 줄부터 열 번째 줄까지 역 순서대로 한 줄에 하나씩 주어진다.

출력

첫째 줄에 최대 사람 수를 출력한다.

예제 입력 1

0 32
3 13
28 25
17 5
21 20
11 0
12 12
4 2
0 8
21 0

예제 출력 1

42

풀이

# boj 2460 지능형 기차 2

res = 0
sum = 0

for _ in range(10):
    n, m = map(int, input().split())
    sum += (m-n)
    res = max(res, sum)

print(res)
728x90
728x90

BOJ 2875 대회 or 인턴

문제

백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다.

(왜인지는 총장님께 여쭈어보는 것이 좋겠다.)

백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 

대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다.

인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.

백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.

여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

시간 제한 : 1 초 
메모리 제한 : 128 MB

입력

첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),

출력

만들 수 있는 팀의 최대 개수을 출력하면 된다.

예제 입력 1

6 3 2

예제 출력 1

2

예제 입력 2

2 1 1

예제 출력 2

0

예제 입력 3

6 10 3

예제 출력 3

3

풀이

# boj 2875 대회 or 인턴 

n, m, k = map(int, input().split())
res = 0

while n >= 2 and m >= 1 and n + m >= k + 3:	
    n -= 2	
    m -= 1	
    res += 1	
print(res)
728x90
728x90

BOJ 1748 수 이어 쓰기 1

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

시간 제한 
Python 3: 0.5 초
PyPy3: 0.5 초
Python 2: 0.5 초
PyPy2: 0.5 초

메모리 제한 : 128 MB

입력

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

출력

첫째 줄에 새로운 수의 자릿수를 출력한다.

예제 입력 1

5

예제 출력 1

5

예제 입력 2

15

예제 출력 2

21

예제 입력 3

120

예제 출력 3

252

풀이

# boj 1748 수 이어 쓰기 1

n = input()
comp = len(n) - 1
res = 0

for i in range(comp):
    res += 9 * (10 ** i) * (i + 1)
    i += 1
res += ((int(n) - (10 ** comp)) + 1) * (comp + 1)

print(res)
728x90
728x90

BOJ 15964 이상한 기호

문제

부산일과학고등학교의 효진이는 수학의 귀재이다.

어떤 문제라도 보면 1분 내에 풀어버린다는 학교의 전설이 내려올 정도였는데, 

이런 킹ㅡ갓 효진에게도 고민이 생겼다. 대부분의 문제에서 반복되는 연산이 있었기 때문이다! 

이 연산은 너무 길어서 종이에 풀던 효진이는 너무 고통스러워서, 자신이 새로 연산자를 만들기로 했다.

연산자의 기호는 @으로, A@B = (A+B)×(A-B)으로 정의내리기로 했다.

하지만, 효진이는 막상 큰 숫자가 들어오자 계산하기 너무 귀찮아졌다.

효진이를 도와 정수 A, B가 주어지면 A@B를 계산하는 프로그램을 만들어주자!

시간 제한 : 2 초
메모리 제한 : 256 MB

입력

첫째 줄에 A, B가 주어진다. (1 ≤ A, B ≤ 100,000)

출력

첫째 줄에 A@B의 결과를 출력한다.

서브태스크 1(30점)

A, B ≤ 1,000

서브태스크 2(70점)

문제에서 주어진 제약 조건 외 제한 없음

예제 입력 1

4 3

예제 출력 1

7

예제 입력 2

3 4

예제 출력 2

-7

풀이

# boj 15964 이상한 기호

a, b = map(int, input().split())
res = (a + b) * (a - b)
print(res)

 

728x90

+ Recent posts