728x90

6/ 08 파이썬 공부
1. 백준 16503 괄호 없는 사칙연산
사칙연산에서 곱셈과 나눗셈은 덧셈과 뺄셈보다 먼저 계산한다. 덧셈과 뺄셈을 먼저 계산하고 싶을 때는 보통 가장 큰 연산 우선순위를 가지는 괄호를 사용하여 연산 순서를 지정한다. 예를 들어, 아래의 식은 연산 순서에 따라 두 가지 다른 결과가 나올 수 있다.

(2 + 3) × 4 = 20
2 + (3 × 4) = 14

연산 우선순위가 같은 곱셈과 나눗셈 또는 덧셈과 뺄셈만 있는 식에서는 보통 왼쪽에서 오른쪽 순서로 연산을 한다. 하지만 이런 상황에도 연산 순서에 따라 아래와 같이 두 가지 다른 결과가 나올 수 있다.

(6 ÷ 2) × 3 = 9
6 ÷ (2 × 3) = 1

만약 곱셈, 나눗셈, 덧셈, 뺄셈의 4가지 연산자의 연산 우선순위가 동등하다고 할 때, 괄호 없는 식에서 서로 다른 연산 순서의 계산 결과를 구하여라.
첫 번째 줄에는 "K1 O1 K2 O2 K3" 형태로 식이 주어진다. 정수 Ki (1 ≤ Ki ≤ 1,000)는 피연산자를, 문자열 Oi는 곱셈(*), 나눗셈(/), 덧셈(+), 뺄셈(-) 중 한 가지 연산자를 의미한다.
나눗셈 연산은 정수 나눗셈으로 몫만 취하며, 피연산자 중 하나가 음수이면 양수로 바꿔 계산한 결괏값에 음수를 취한다. 또한, 계산 과정에서 0으로 나누어야 하는 식은 주어지지 않는다.
주어진 식에서 서로 다른 연산 순서의 계산 결과가 작은 것을 첫 번째 줄에, 큰 것을 두 번째 줄에 출력한다.

>>>코드

def f(a, o, b):
    if o == '+':
        r = a+b
    elif o == '-':
        r = a-b
    elif o == '*':
        r = a*b
    elif o == '/':
        if a<0 or b<0:
            r = -((-a)//b)
        else:
            r = a//b
    return r
k1, o1, k2, o2, k3 = input().split()
k1, k2, k3 = int(k1), int(k2), int(k3)
r1 = f(f(k1, o1, k2),o2,k3)
r2 = f(k1, o1, f(k2, o2, k3))
print(min(r1, r2))
print(max(r1, r2))



하나하나 하는 것보다, 함수를 선언하는 것이 훨씬 빠르다.

2. 백준 18247 겨울왕국 티켓 구매
정휘는 애니메이션계의 영원한 명작이자 최고의 흥행작 겨울왕국 2를 자그마치 싱어롱으로 관람하려고 한다!
겨울왕국에 등장하는 캐릭터 중 엘사를 너무 좋아하는 정휘는 L4, 즉 L열의 네 번째 자리에 앉으려고 한다.
그러나 정휘가 가려는 영화관은 좌석 번호가 자연수 하나로 표현되기 때문에 예매를 하기가 힘들다.
정휘가 겨울왕국을 관람하는 영화관은 세로로 N칸, 가로로 M칸인 좌석들로 구성되어 있다. 
좌석의 번호는 좌상단 끝에 있는 A열의 첫 번째 자리부터 1번으로 시작하여 오른쪽으로 번호가 하나씩 증가하다가 끝에 다다르면 B열의 첫 번째 자리부터 또 오른쪽으로, C열의 첫 번째 자리부터 또 오른쪽으로 진행하는 것을 반복하면서 숫자가 증가해 나간다.
정휘가 좌석 L4를 빠르게 선점하여 Show Yourself를 신나게 부를 수 있도록 L열의 네 번째 자리의 좌석 번호를 구해주자.
첫 번째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 20)이 주어진다.
각 테스트 케이스는 한 줄로 구성되며, 각각 두 개의 자연수 N, M(1 ≤ N ≤ 26, 1 ≤ M ≤ 9)이 주어진다. N은 영화관 자리의 열 개수, M은 영화관 한 열에 속한 좌석 개수를 의미한다.
아래 사진은 N = 4, M = 6인 경우이다.
(생략)
각 테스트 케이스에 대해, 한 줄에 하나씩 L열의 네 번째 자리의 좌석 번호를 출력한다. 
만약 영화관에 L열 네 번째 자리가 존재하지 않는다면 -1을 출력한다.

>>>코드

for _ in range(int(input())):
    n, m = map(int, input().split())
    if n < 12 or m < 4:
        print(-1)
    else:
        print(11*m + 4)



3. 백준 19572 가뭄(Small)
가뭄에 찌든 신촌을 위해서 국렬이는 세 칸으로 구성되어 있는 신촌에 비를 내릴 것이다. 
그러나 국렬이는 무능해서 각 칸마다 비를 내리지 못하고, 두 칸에 동일하게 비를 내리는 것만 할 수 있다.

1번째 칸, 2번째 칸에 동시에 뿌리는 비의 강수량을 a cm, 1번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 b cm, 2번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 c cm라고 하자. 
a, b, c는 모두 양의 실수여야 한다. 
가뭄에 찌든 신촌이라도 비가 너무 많이 오면 상당히 곤란하고, 비가 너무 조금 와도 곤란하다. 
그래서 각 칸에 해당하는 지역은 강수량이 정확히 di cm가 되어야 한다. 
이때 정확한 a, b, c의 값을 구하여라.
3개의 양의 정수가 입력으로 들어온다. 각각은 d1, d2, d3을 의미한다. (1 ≤ d1, d2, d3 ≤ 10**6)
조건에 맞게 비를 내릴 수 없다면 -1을 출력한다.
조건에 맞게 비를 내릴 수 있다면 1을 출력하고, 다음 줄에 a, b, c를 소수 첫째 자리까지 반올림한 것을 공백으로 구분하여 출력한다.

>>>코드

d1, d2, d3 = map(float, input().split())
if d1+d2-d3 > 0 and d1-d2+d3 > 0 and d2-d1+d3 > 0:
    print(1)
    print(round((d1+d2-d3)/2, 1), round((d1-d2+d3)/2, 1), round((d2-d1+d3)/2, 1))
else:
    print(-1)



연립 방정식을 풀자..

4. 백준 27159 노 땡스!
《노 땡스!》는 3부터 35까지의 정수가 쓰인 수 카드를 이용하여 플레이할 수 있는 보드게임입니다. 수 카드를 경매를 통해서 낙찰받으며, 최종적으로 가지고 있는 수 카드를 이용하여 다음과 같이 점수를 계산합니다.
정수들을 오름차순으로 정렬한 뒤, 이웃한 수끼리의 차가 1인 구간들로 그룹을 나눕니다.
각 그룹별로 가장 작은 수를 모두 합한 값이 점수가 됩니다.
예를 들어 가지고 있는 수 카드가 6, 7, 10, 12, 13, 14, 15, 20, 21, 22라면, [6, 7], [10], [12, 13, 14, 15], [20, 21, 22]의 4개의 그룹으로 나뉘며, 점수는 6 + 10 + 12 + 20 = 48점입니다.
가지고 있는 수 카드가 주어졌을 때 점수를 계산하는 프로그램을 작성하세요.
첫 번째 줄에 수 카드의 개수 N이 주어집니다.
두 번째 줄에 N개의 카드에 적힌 정수 x_i가 공백으로 구분되어 오름차순으로 주어집니다.
첫 번째 줄에 문제에서 설명한 규칙에 따라 계산한 점수를 출력합니다.

>>>코드

n = int(input())
card = list(map(int, input().split()))
card.sort()
r = card[0]
for i in range(1, len(card)):
    if card[i] != card[i-1] + 1:
        r += card[i]
print(r)
728x90

+ Recent posts