728x90
반응형

우선 듣도 못한 사람의 이름을 set에 저장한다.

그 후 보도 못한 사람의 이름이 set에 들어있지 않다면 듣도 보도 못한 사람 리스트에 이름을 추가하면 된다.

a, b = map(int, input().split())
s = set()
li = []
for _ in range(a):
    s.add(input())
for _ in range(b):
    name = input()
    if name in s:
        li.append(name)
print(len(li))
for c in sorted(li):
    print(c)

728x90
반응형
728x90
반응형

A + B * x < C * x ->  A < (C - B) * x 식을 만족하는 x의 최솟값은 A // (C - B) + 1이다.

A, B, C = map(int, input().split())
if B >= C:
    print(-1)
else:
    print(A//(C-B)+1)

728x90
반응형
728x90
반응형

팩토리얼 결과값을 str로 변경하고 뒤에 0이 몇개 있는지 확인하면 된다.

허나 입력이 커진다면 시간초과가 뜰 것이다.

import math
n = str(math.factorial(int(input())))
l = len(n)
for i in range(l):
    if n[l-i-1] != '0':
        break
print(i)

뭔가 효율적인 방법이 있지 않을까해서 찾아본 결과 아래의 방식을 찾을 수 있었다.  

n = int(input())
t = n
n2, n5 = 0, 0
while(t != 0):
    t //= 2
    n2 += t
while(n != 0):
    n //= 5
    n5 += n
print(min(n2, n5))

728x90
반응형
728x90
반응형

행과 열을 기준으로 나눠서 각각 탐색하는 방식으로 풀었다.

n = int(input())
li = []
r, c = 0, 0
cnt = 0
for i in range(n):
    li.append(list(input()))
for i in range(n):
    cnt = 0
    for j in range(n):
        if li[i][j] == '.':
            cnt += 1
        else:
            cnt = 0
        if cnt == 2:
            r += 1
for i in range(n):
    cnt = 0
    for j in range(n):
        if li[j][i] == '.':
            cnt += 1
        else:
            cnt = 0
        if cnt == 2:
            c += 1
print(r, c)

728x90
반응형
728x90
반응형

print(A**B%C)

위와 같이 계산을 하려 하면 시간 초과가 뜬다.

pow를 사용해주자.

EX) pow(2, 4, 3) = 2 ** 4 % 3

A, B, C = map(int, input().split()) 
print(pow(A, B, C))

728x90
반응형
728x90
반응형

그냥 수학 문제이다.

입력으로 받은 점수들에 각각 100을 곱하고 최대 점수로 나눈다.

마지막으로 점수들을 모두 더하고 과목의 개수만큼 나누면 된다.

n = int(input())
li = list(map(int, input().split()))
m = max(li)
for i in range(n):
    li[i] = li[i] * 100 / m
print(sum(li)/n)

728x90
반응형
728x90
반응형

처음으로 '-'가 나오는 순간부터 그 뒤에 있는 숫자들은 무조건 빼야 된다는 것을 이해하면 간단하게 풀 수 있다!

EX) 입력이 "55+10-50+40-20+20"이면 

li = ["55+10", "50+40", "20+20"]가 되는데 처음 요소인 "55+10"의 합에 뒤에 있는 모든 요소들의 합을 빼주면 된다. 

-> (55+10) - (50+40) - (20+20) = 65 - 90 - 40 = -65

li = input().split('-')
ans = sum(map(int, li[0].split('+')))
for s in li[1:]:
    ans -= sum(map(int, s.split('+')))
print(ans)
728x90
반응형
728x90
반응형

입력을 리스트에 저장.

[1, 1, 1] 리스트를 생성하고 g와 같아질 때까지 조건에 맞게 1을 더하면 된다.

g = list(map(int, input().split()))
li = [1, 1, 1]
cnt = 1
while li != g:
    for i in range(3):
        li[i] += 1
    if li[0] == 16:
        li[0] = 1
    if li[1] == 29:
        li[1] = 1
    if li[2] == 20:
        li[2] = 1
    cnt += 1
    
print(cnt)

728x90
반응형
728x90
반응형

우선 9를 제외한 모든 수의 개수를 세기 위해 리스트를 만든다.

9가 들어올 경우 6의 카운트를 올리고 다른 경우는 각 숫자에 맞게 카운트를 올린다.

6의 카운트가 홀수라면 카운트에 2를 나누고 1을 더하고 짝수라면 카운트에 2를 나눠준다.

그리고 마지막으로 max를 통해 리스트에서 제일 큰 값을 찾으면 된다.

# 6의 카운트를 위와 같이 변경하는 이유 

EX) 66666의 경우, 69, 69, 6으로 총 3세트가 필요

EX) 696999의 경우, 69, 69, 69로 총 3세트가 필요

n = input()
li = [0]*9
for i in n:
    i = int(i)
    if i == 9:
        i = 6
    li[i] += 1
li[6] = (li[6]+1)//2
print(max(li))

728x90
반응형
728x90
반응형

물이 샌 곳을 막는데 막대기는 왼쪽 끝과 오른쪽 끝 0.5를 제외한 1만큼의 여유가 필요하다.

현재 물이 샌 곳에 테이프 길이를 더하고 1을 뺀 값이 다음 물이 샌 곳보다 작으면 막대기 한 개가 필요하다.

물이 샌 곳의 위치가 저장된 리스트를 정렬한 후에 위의 경우가 있는지 끝까지 확인하고 카운트를 새면 된다.

n, len_tape = map(int, input().split())
li = sorted(list(map(int, input().split())))
t, cnt = 0, 1
for i in range(1, n):
    if li[t] + len_tape - 1 < li[i]:
        cnt += 1
        t = i
print(cnt)
728x90
반응형
728x90
반응형

너무 간단하게 구현해서 시간초과가 될 줄 알았는데 통과됬다.

입력과 cnt가 같아질 때까지 i에 계속 1을 더하고 마지막에 i를 출력하면 된다.

N = int(input())
cnt = 1
i = 666
while(cnt != N):
    i += 1
    if '666' in str(i):
        cnt += 1
print(i)

728x90
반응형
728x90
반응형

입력을 그대로 내림차순 정렬해주고 join을 통해 합쳐서 출력하면 된다.

print(''.join(sorted(input(), reverse=True)))

728x90
반응형
728x90
반응형

그냥 Rev 함수를 만들어서 사용했다.

반전돼서 앞자리들이 '0'이 되더라도 int 함수가 '0'을 없애주기 때문에 상관없다.

EX) '100'이 반전돼서 '001'이 되더라도 int 함수가 1로 바꿔준다.

def Rev(n):
    return int(str(n)[::-1])

n1, n2 = map(int, input().split())
print(Rev(Rev(n1) + Rev(n2)))

728x90
반응형
728x90
반응형

매우 쉬운 문제이다.

상황에 맞게 부호를 출력해주면 된다.

n1, n2 = map(int, input().split())
if n1 < n2:
    print('<')
elif n1 > n2:
    print('>')
else:
    print('==')

728x90
반응형
728x90
반응형

find를 통해 뒷 글자와 앞 글자의 위치를 비교하면 된다.

단어의 모든 구간에서 뒷 글자의 위치가 앞 글자의 위치보다 크다면 그룹 단어이다.

# find는 원하는 글자의 제일 앞 위치를 알려준다.

EX) 'jinhoiii'.find('i') = 1 

result = int(input())
for _ in range(result):
    word = input()
    for i in range(1, len(word)):
        if word.find(word[i-1]) > word.find(word[i]):
            result -= 1
            break
print(result)

728x90
반응형

+ Recent posts