728x90
반응형

자기보다 덩친 큰 사람이 몇 명인지 확인하고 거기에 1을 더한 값을 list에 순서대로 추가해주면 된다.

EX) [55, 185], [58, 183], [88, 186]

ans = []

1) [55, 185] 보다 덩치 큰 사람 1명(88, 186) -> ans.append(1+1)

2) [58, 183] 보다 덩치 큰 사람 1명(88, 186) -> ans.append(1+1)

3) [88, 186] 보다 덩치 큰 사람 없음 -> ans.append(0+1)

-> ans = [2, 2, 1]

N = int(input())
li = []
ans = []
for i in range(N):
    li.append(list(map(int, input().split())))
for i in range(N):
    cnt = 1
    for wh in li:
        if li[i][0] < wh[0] and li[i][1] < wh[1]:
            cnt += 1
    ans.append(str(cnt))
print(' '.join(ans))

728x90
반응형
728x90
반응형

맞은 문제수와 닉네임을 출력해주면 된다. 이게 왜 정답률이 50% 아래일까ㅋㅋ

print('214\njjhhkim')

728x90
반응형
728x90
반응형

sum(map(int, list(str(n)))) -> 모든 자릿수의 합을 구해줌.

while True:
    n = int(input())
    if n:
        while(n > 9):
            n = sum(map(int, list(str(n))))
        print(n)
    else:
        break

728x90
반응형
728x90
반응형

시간 초과 때문에 꽤 많이 틀렸다. 최대한 효율적으로 답을 구해야 한다.

핵심은 x%N == y%N을 만족하는 x, y가 있는지 확인하는 것이다. 

처음에는 이해가 잘 안됬었는데, 생각해보면 x에다 M을 더하면 똑같이 x다. 사실상 x는 고정해두고 y가 조건에 맞는지만 확인하면 된다는 것이다. x를 N으로 나눈 나머지가 y를 N으로 나눈 나머지와 같을 때까지 x에 M을 계속 더해주면 된다.

x%N == y 가 아니라 x%N == y%N인 이유는 x가 N으로 딱 나누어졌을 경우에 나머지가 0이기 때문이다.

x가 M*N보다 커졌는데도 해를 찾지 못했다면 유효하지 못한 표현이므로 -1을 출력한다.

EX) M = 10, N = 12, x = 3, y = 9

1) 3%12 != 9%12

2) 13%12 != 9%12

3) 23%12 != 9%12

4) 33%12 = 9%12 = 9

for _ in range(int(input())):
    M, N, x, y = map(int, input().split())
    f = 1
    while(x <= M*N):
        if x%N == y%N:
            print(x)
            f = 0
            break
        x += M
    if f:
        print(-1)
728x90
반응형
728x90
반응형

for _ in range(int(input())):
    if int(input()) % 2:
        print('odd')
    else:
        print('even')

728x90
반응형
728x90
반응형

직접 영역을 나누어서 알파벳에 맞게 일일이 더해주는 방식으로 풀었다.

s = ['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
a = input().lower()
res = 0
for j in range(len(a)):
    for i in s:
        if a[j] in i:
            res += s.index(i)+3
print(res)

728x90
반응형
728x90
반응형

아스키코드를 사용하면 쉽게 풀 수 있다. 

알파벳의 아스키코드에서 3을 뺀 값이 A의 아스키코드보다 작다면(A, B, C의 경우) 26을 더해주면 된다.

li = list(input())
for i in range(len(li)):
    k = ord(li[i]) - 3
    if k < ord('A'):
        k += 26
    li[i] = chr(k)
print(''.join(li))
728x90
반응형
728x90
반응형

JOI 같은 경우에는 replace를 통해 개수를 구할 수 있지만, IOI 같은 경우에는 replace를 사용할 수가 없어서 그냥 일일이 확인하는 방식으로 해결했다.

li = list(input()) 
a, b = 0, 0 
for i in range(len(li)-2): 
    if li[i] == 'J' and li[i+1] == 'O' and li[i+2] == 'I': 
        a += 1 
    if li[i] == 'I' and li[i+1] == 'O' and li[i+2] == 'I': 
        b += 1 
print(a) 
print(b)
728x90
반응형
728x90
반응형

조건에 맞게 반복문을 사용해서 출력해주면 되는 노가다 문제이다.

for _ in range(int(input())):
    n = int(input())
    if n < 3:
        for i in range(n):
            print('#'*n)
        print()
    else:
        print('#'*n)
        for i in range(n-2):
            print('#' + 'J'*(n-2) + '#')
        print('#'*n, '\n')
728x90
반응형
728x90
반응형

ord를 사용해 알파벳을 아스키코드로 바꾸면 알파벳 거리를 쉽게 구할 수 있다.

for _ in range(int(input())):
    a, b = input().split()
    li = []
    for i in range(len(a)):
        if ord(a[i]) > ord(b[i]):
            li.append(26 - (ord(a[i])-ord(b[i])))
        else:
            li.append(ord(b[i]) - ord(a[i]))
    print("Distances:", *li)

728x90
반응형
728x90
반응형

쉬운 수학문제이다.

while True:
    n1, n2 = map(int, input().split())
    if n1 + n2 == 0:
        break
    if n1 % n2 == 0:
        print('multiple')
    elif n2 % n1 == 0:
        print('factor')
    else:
        print('neither')

728x90
반응형
728x90
반응형

이 문제 또한 저번에 봤던 에라토스테네스의 체를 사용해 쉽게 풀 수 있다.

while True:
    n = int(input())
    if n == 0:
        break
    n1, n2= n+1, 2*n
    li = [1]*(n2+1)
    for i in range(2, int((n2+1)**0.5) + 1):
        if li[i] == 1:
            for j in range(i+i, n2+1, i):
                li[j] = 0
    cnt = 0
    for i in range(n1, n2+1):
        if li[i] == 1 and i > 1:
            cnt += 1
    print(cnt)

728x90
반응형
728x90
반응형

1부터 10000까지 리스트에 추가하고 1부터 10000까지의 수들을 생성자라 생각하고 생성했을 때

나오는 수를 리스트에서 빼주면 된다.

EX) 생성자가 1이라고 했을 때 생성되는 수는 2다. 즉 2는 생성자가 있는 수이므로 리스트에서 제거된다.

li = [i for i in range(1, 10001)]
for i in range(1, 10000):
    s = i
    for j in str(i):
        s += int(j)
    if s in li:
        li.remove(s)
for n in li:
    print(n)
728x90
반응형
728x90
반응형

입력을 n으로 나누었을 때 나머지가 0이라면 입력은 n의 배수이다. 0이 아니라면 배수가 아니다.

n = int(input())
while 1:
    t = int(input())
    if t == 0:
        break
    if t % n != 0:
        print('{0} is NOT a multiple of {1}.'.format(t, n))
    else:
        print('{0} is a multiple of {1}.'.format(t, n))

728x90
반응형
728x90
반응형

입력앞에 숫자만 붙여서 그대로 출력해주면 된다.

format을 사용하자!

for i in range(int(input())):
    print('{0}. {1}'.format(i+1, input()))

728x90
반응형

+ Recent posts