728x90
반응형

단순한 구현 문제이다. dart 딕셔너리를 써서 조건문을 많이 줄일 수 있었다.

 

풀이

def solution(dartResult):
    dart = {'S': 1, 'D': 2, 'T': 3}
    n = ''
    score = []

    for c in dartResult:
        if c.isnumeric():
            n += c
        elif c in dart:
            score.append(int(n) ** dart[c])
            n = ''
        elif c == '*':
            score[-2:] = [s*2 for s in score[-2:]]
        elif c == '#':
            score[-1] = -score[-1]       

    return sum(score)
728x90
반응형
728x90
반응형

기본적인 그래프 탐색 문제이다. 최단거리를 찾는 문제이므로 BFS로 풀었다.

from collections import deque

def bfs():
    q = deque()
    q.append((0))
    while q:
        node = q.popleft()
        n = li[node]
        if check[n] == 0 and node != n:
            q.append(n)
            check[n] = check[node] + 1
            if n == K:
                return ;
    
N, K = map(int, input().split())
li = [int(input()) for _ in range(N)]
check = [0]*N
bfs()
print(check[K] if check[K] else -1)
728x90
반응형
728x90
반응형

단순 문자열 & 구현 문제이다.

N = int(input())
S = input()
res = ''
for c in S:
    if c not in "JAVA":
        res += c
print(res if res else "nojava")
728x90
반응형
728x90
반응형

단순 구현 문제이다.

max_score = [100, 100, 200, 200, 300, 300, 400, 400, 500]
score = list(map(int, input().split()))
total_score, hacker = 0, 0
for i in range(9):
    if score[i] > max_score[i]:
        hacker = 1
    total_score += score[i]
if hacker:
    print("hacker")
else:
    print("draw" if total_score >= 100 else "none")
728x90
반응형
728x90
반응형

단순 구현 문제이다.

for _ in range(int(input())):
    s, n = input().split()
    n = int(n)
    if n >= 97: res = "A+"
    elif n >= 90: res = "A"
    elif n >= 87: res = "B+"
    elif n >= 80: res = "B"
    elif n >= 77: res = "C+"
    elif n >= 70: res = "C"
    elif n >= 67: res = "D+"
    elif n >= 60: res = "D"
    else: res = "F"
    print(s, res)
728x90
반응형
728x90
반응형

단순 구현 문제이다.

li = ["baby", "sukhwan", "tururu", "turu", "very", "cute", "tururu", 
      "turu", "in", "bed", "tururu", "turu", "baby", "sukhwan"]
N = int(input())-1
k = N//14
if N%14 in [3, 7, 11]:
    print(f"tu+ru*{k+1}" if k >= 4 else "turu"+"ru"*k)    
elif N%14 in [2, 6, 10]:
    print(f"tu+ru*{k+2}" if k >= 3 else "tururu"+"ru"*k)    
else:
    print(li[N%14])
728x90
반응형
728x90
반응형

단순 구현(별 찍기) 문제이다.

N = int(input())
if N%2:
    t = N//2
    print('*'*N)
    print(' '*(N-t-1) + '*')
    for i in range(t):
        print(' '*(t-i-1) + '*' + ' '*(2*i+1) + '*')
else:
    print("I LOVE CBNU")
728x90
반응형
728x90
반응형

단순 구현 문제이다.

s = input()
res = 10
for i in range(1, len(s)):
    res += 10 if s[i-1] != s[i] else 5
print(res)
728x90
반응형
728x90
반응형

기본적인 스택 문제이다.

import sys
input = sys.stdin.readline

N = int(input())
li = [int(input()) for _ in range(N)]
stack, cnt = [li.pop()], 1
for n in li[::-1]:
    if stack[-1] < n:
        cnt += 1
        stack.append(n)
print(cnt)
728x90
반응형
728x90
반응형

수학 & 백트래킹 문제이다. 그런데 백트래킹을 써서 푸니까 시간 초과가 나온다.

시간 초과가 뜰 만 한 코드이긴 한데 어떻게 해결해야 할지 모르겠어서 일단 반복문을 사용해서 해결했다.

반복문 풀이(통과)

N = int(input())
s = set()
for i in range(N+1):
    for j in range(N+1 - i):
        for k in range(N+1 - i - j):
            t = N-i-j-k
            n = i + 5*j + 10*k  + 50*t
            s.add(n)

print(len(s))

백트래킹 풀이(시간 초과)

def dfs(depth, s):
    if depth == N:
        check[s] = 1
        return ;
    for i in range(4):
        dfs(depth+1, s+nums[i])
        
N = int(input())
nums = [1, 5, 10, 50]
check = [0]*(50*20+1)
dfs(0, 0)
cnt = 0
for i in check:
    if i:
        cnt += 1
print(cnt)
728x90
반응형
728x90
반응형

그냥 lambda로 정렬해서 풀면 된다. lambda 짱!

N = int(input())
li = [list(map(int, input().split())) for _ in range(N)]
sorted_li = sorted(li, key=lambda x:(-x[0], x[1], x[2]))
print(li.index(sorted_li[0])+1)
728x90
반응형
728x90
반응형

기본적인 우선순위 큐 문제이다.

import heapq
import sys
input = sys.stdin.readline

N = int(input()) 
q = []
for _ in range(N):
    n = int(input())
    if n != 0:
        heapq.heappush(q, (abs(n), n))
    else:
        print(heapq.heappop(q)[1] if q else 0)
728x90
반응형
728x90
반응형

단순 구현 문제이다.

import sys
input = sys.stdin.readline

N, T = map(int, input().split())
d = [(1, 0), (0, -1), (-1, 0), (0, 1)]
i = X = Y = 0
li = [0]
for _ in range(N):
    time, s = input().split()
    time = int(time)
    t = time-li[-1]
    li.append(time)
    x, y = d[i][0], d[i][1]
    X += t*x; Y += t*y
    i += 1 if s == 'right' else -1
    i = i%4
t = T-li[-1]
x, y = d[i][0], d[i][1]
X += t*x; Y += t*y
print(X, Y)
728x90
반응형
728x90
반응형

기본적인 다이나믹 프로그래밍 문제이다. 처음에 풀 때 dp에 문자열(EX: "BA")을 저장했는데

메모리 초과가 나와서 그냥 숫자로 해결했다.

k = int(input())
dp = [0]*(k+1)
dp[1] = 1
for i in range(2, k+1):
    dp[i] = dp[i-1]+dp[i-2]
print(dp[k-1], dp[k])
728x90
반응형
728x90
반응형

단순 문자열 & 구현 문제이다.

s = input()
li = ['E', 'I', 'S', 'N', 'T', 'F', 'J', 'P']
for c in s:
    li.remove(c)
res = ''.join(li)
print(res)
728x90
반응형

+ Recent posts