코딩

[ABC 366] AtCoder Beginner Contest 366 리뷰

척척석사아님 2024. 8. 17. 02:41
728x90

 

 

N, T, A라는 숫자가 주어지고, A와 T는 각각 현재 득표수를 나타내는 상황이며  N은 총 표수를 나타낸다.

이때 이 선거의 결과 여부를 판단하는 문제가 되겠다.

남아있는 표수를 구한 뒤, 케이스를 나눠 계산해주면 되겠다.

import sys
input = sys.stdin.readline

n,t,a = map(int,input().split())
remain = n - t - a
if t <= a:
    if t + remain < a:
        print("Yes")
    else:
        print("No")
elif a <= t :
    if a + remain < t:
        print("Yes")
    else:
        print("No")

 

 

 

 

주어진 문자열을 규칙에 맞게 출력해주면 되겠다.

즉, 아래에서부터 위로 읽어주는건데 (f->d->a... 순), 마지막에 딸려있는 공백은 읽지 않고,

중간에 껴있는 공백은 *를 넣어주면 되겠고, 해당 코드는 아래와 같이 나오겠다.

import sys
input = sys.stdin.readline

N = int(input())
max_length = -1
word = []
for _ in range (0,N):
    s = input().rstrip()
    word.append(s)
    max_length = max(max_length, len(s))
new_word = []
for i in range (0,N):
    new_s = word[i] + (max_length - len(word[i])) * "*"
    new_word.append(new_s)

answer = []

for i in range (0,max_length):
    word = ""
    cnt = 0
    for j in range (N-1,-1,-1):
        if new_word[j][i] != "*":
            word += cnt * "*"
            word += new_word[j][i]
            cnt = 0
        else:
            cnt += 1
    answer.append(word)
    
for ans in answer:
    print(ans)

 

 

 

 

 

 

 

주어진 쿼리에 따라서 명령어를 수행하면 되겠다.

 

1은 볼을 넣고, 

2는 볼을 빼고, (반드시 있다는 것이 보장)

3은 현재 숫자가 쓰여있는 볼의 종류 갯수 출력

 

딕셔너리를 사용하면 더욱 간편하게 풀 수 있는 것 같다. (시간복잡도도 굉장히 좋기때문)

 

import sys
from collections import defaultdict
input = sys.stdin.readline


Q = int(input())
d = defaultdict(int)
cnt = 0
def f(cmd):
    global d
    global cnt
    if len(cmd) == 1: #케이스 3의 경우
        print(cnt)  #cnt가 갯수를 뜻하겠다
    elif len(cmd) == 2:
        if cmd[0] == 1: #케이스 1의 경우
            d[cmd[1]] += 1
            if d[cmd[1]] == 1:
                cnt += 1
        elif cmd[0] == 2: #케이스 2의 경우
            d[cmd[1]] -= 1
            if d[cmd[1]] == 0:
                cnt -= 1
                
for _ in range (0,Q):
    cmd = list(map(int,input().split()))
    f(cmd)

 

 

3차원 prefix 문제가 되겠다.

3차원의 직육면체를 분할해서 생각해보면 좋을 것 같다.

 

import sys
from collections import defaultdict
input = sys.stdin.readline

N = int(input())
num = [[[0 for _ in range (0,N+1)] for _ in range (0,N+1)] for _ in range (0,N+1)]
for i in range (0,N):
    for j in range (0,N):
        a = list(map(int,input().split()))
        for k in range (0,N):
            num[i+1][j+1][k+1] = a[k]
prefix = [[[0 for _ in range (0,N+1)] for _ in range (0,N+1)] for _ in range (0,N+1)]
for i in range (1,N+1):
    for j in range (1, N+1):
        for k in range (1,N+1):
            prefix[i][j][k] = prefix[i][j][k-1] + prefix[i][j-1][k] + prefix[i-1][j][k] - prefix[i-1][j-1][k] - prefix[i-1][j][k-1] - prefix[i][j-1][k-1] + prefix[i-1][j-1][k-1] +num[i][j][k]

Q = int(input())
for _ in range (0,Q):
    l_x,r_x,l_y,r_y,l_z,r_z = map(int,input().split())
    l_x,l_y,l_z = l_x-1, l_y-1, l_z-1
    answer = prefix[r_x][r_y][r_z] - prefix[l_x][r_y][r_z] - prefix[r_x][l_y][r_z] - prefix[r_x][r_y][l_z] + prefix[r_x][l_y][l_z]  + prefix[l_x][r_y][l_z]  + prefix[l_x][l_y][r_z]  - prefix[l_x][l_y][l_z]
    print(answer)

 

E,F는 수학쪽에 가까운 문제 같았는데 못 풀어서 상당히 아쉬웠다.

 

힘내서 풀어봐야겠다.