반응형

 

 

 

 

 

 

www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

 

 

 

코드

n = (int)(input())

for i in range(n):
    funcstr = input()
    list_n = (int)(input())

    de = (str)(input())[1:-1].split(',')
    funcstr = funcstr.replace('RR','')

    if list_n == 0:
        de = []

    r_flag = 0
    flag = 1
    for j in range(len(funcstr)):
        if funcstr[j] == 'R':
            r_flag = not r_flag
        else:
            if len(de) == 0:
                print("error")
                flag = 0
                break

            if r_flag:
                de.pop(len(de)-1)
            else:
                de.pop(0)


    if flag == 1:
        if r_flag:
            de.reverse()
        print('[', end='')
        print(','.join(de), end='')
        print(']')

 

 

 

1. 양 옆의 '['와 ']'를 인덱싱으로 제거하고, 콤마를 기준으로 split() 

de = (str)(input())[1:-1].split(',')

 

 

2. 'RR'이면 다시 원상태이기 때문에 replace() 함수로 없애주었다.

funcstr = funcstr.replace('RR','')

 

3. 줄바꿈없이 print

print('[', end='')

 

 

4. 중간중간 콤마를 넣어 join

print(','.join(de), end='')

 

 

 

 

반응형
반응형

 

 

 

 

www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

 

 

파이썬 코드

from collections import deque

n, m = map(int, input().split())

deq = deque(i+1 for i in range(n))
li = list(map(int, input().split()))

sum = 0
for i in range(m):
    diff = deq.index(li[0])
    diff_rev = len(deq) - diff

    if diff == 0:
        li.pop(0)
        deq.popleft()
    elif diff < diff_rev:
        deq.rotate(-diff)
        sum += diff
        li.pop(0)
        deq.popleft()
    else:
        deq.rotate(diff_rev)
        sum += diff_rev
        li.pop(0)
        deq.popleft()

print(sum)

 

 

뽑아야 하는 값의 인덱스를 diff로, 전체 deque의 길이에서 diff를 뺀 값을 diff_rev로 놓았습니다.

diff가 0이면 뽑아야 하는 수가 가장 앞에 있다는 의미이므로 리스트와 deque에서 각각 값을 꺼냅니다.

diff 보다 diff_rev가 더 크면 deque를 오른쪽 방향으로 diff_rev 만큼 rotate 시킨 후 값을 꺼냅니다.

반대는 반대로 합니다.

 

 

 

 

 

 

반응형
반응형

 

 

 

이게 웬 난리.....

 

 

www.acmicpc.net/problem/1002

 

1002번: 터렛

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

www.acmicpc.net

 

 

파이썬 코드

n = (int)(input())

for i in range(n):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())

    # 피타고라스 거리 : y
    y = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
    rs = r1 + r2
    rm = abs(r1 - r2)

    if y == 0:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if rs == y or rm == y:
            print(1)
        elif rs > y and rm < y:
            print(2)
        else:
            print(0)

 

두 점이 같고, 거리도 같으면 완전히 원이 겹치기 때문에 -1

두 점이 같고, 거리는 다르면 겹치는 점이 하나도 없기 때문에 0

 

두 거리를 합한 값이 두 점 사이의 거리와 같거나(두 원이 맞닿아 만남),

두 거리의 차이가 두 점 사이의 거리와 같으면(한 원이 다른 원을 포함하면서 한 점에서 겹침)

한 점에서 만나기 때문에 1

 

두 거리의 합이 두 점 사이의 거리보다 크면서, 두 거리의 차이가 두 점 사이의 거리보다 작으면

두 점에서 만나기 때문에 2

=> 여기서 뒤에 조건을 설정해주지 않아 계속 틀렸는데요 ㅠㅠ

만약 두 거리의 차이가 두 점 사이의 거리보다 크면 한 원이 다른 원을 완전히 포함하기 때문에 만나는 점이 없습니다.

 

그 이외에서는 모두 0

 

 

 

 

새롭게 알게된 사실 )

제곱근 구할 때, 굳이 import math해서 구하지 않아도 ** 0.5 해주면 구할 수 있습니다..!

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 

 

 

세 수 중 가장 큰 값을 maxInt에 넣어놓고 리스트에서 그 값을 뺀다.

나머지 두 수의 제곱의 합이 maxInt와 같으면 right, 다르면 wrong을 출력한다.

 

while(True):
    listA = list(map(int, input().split()))

    if sum(listA) == 0:
        break

    maxInt = max(listA)
    listA.remove(maxInt)

    if listA[0] ** 2 + listA[1] ** 2 == maxInt ** 2:
        print('right')
    else:
        print("wrong")

 

 

 

새로 알게된 사실 )

list 이름을 list로 하면 안된다 ! 당연히 안 되는 건데 왜 썼는지 모르겠다 ㅋㅋ

그리고 max(list), sum(list) !!

 

 

 

 

 

반응형
반응형

 

 

 

 

www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

 

 

그리디 알고리즘으로 주유소를 지나면서

가장 주유비가 작은 비용으로 계속 더하는 방식으로 풀었습니다.

 

import sys

min = sys.maxsize
n = (int)(input())

# list에 값 넣기
listDis = list(map(int,input().split()))
listCost = list(map(int,input().split()))

# 도시를 다니면서 비용을 더하기
result = 0
for i in range(n-1):
    if(i == 0):
        result += listDis[i] * listCost[i]
        min = listCost[i]
    else:
        if listCost[i] < min:
            min = listCost[i]
        result += listDis[i] * min

print(result)

 

 

새롭게 알게된 문법 )

리스트에 값을 입력받아서 바로 넣기

listDis = list(map(int,input().split()))
listCost = list(map(int,input().split()))

 

 

 

 

 

반응형
반응형

 

 

 

sort vs sorted

sort()는 one dimensional list에서 많이 쓰이고,

sorted()는 여러 차원이나 조건들을 설정할 때 많이 쓰인다.

 

sort()

오름차순

a = [1,4,2,5,3]
print(a.sort())
[1,2,3,4,5]

 

내림차순

a = [1,4,2,5,3]
print(a.sort(reverse=True))
[5,4,3,2,1]

 

 

 

 

sorted()

>>> students = [
        ('홍길동', 3.9, 2016303),
        ('김철수', 3.0, 2016302),
        ('최자영', 4.3, 2016301),
]

 

오름차순(세 번째 값을 기준으로)

>>> sorted(students, key=lambda student: student[2])
[('최자영', 4.3, 2016301), ('김철수', 3.0, 2016302), ('홍길동', 3.9, 2016303)]

 

내림차순

>>> sorted(students, key=lambda student: -student[2])
[('홍길동', 3.9, 2016303), ('김철수', 3.0, 2016302), ('최자영', 4.3, 2016301)]

 

 

 

 

만약 세 번째 값은 오름차순, 두 번째 값은 내림차순으로 정렬하고 싶다면?

>>> sorted(students, key=lambda student: (student[2],-student[1]))
[('최자영', 4.3, 2016301), ('김철수', 3.0, 2016302), ('홍길동', 3.9, 2016303)]

 

 

 

반응형

+ Recent posts