728x90
반응형

단순 구현 문제이다.

n = int(input())
for i in range(1, n):
    print('*'*i + ' '*2*(n-i) + '*'*i)
for i in range(n, 0, -1):
    print('*'*i + ' '*2*(n-i) + '*'*i)
728x90
반응형
728x90
반응형

단순 구현 문제이다.

n = int(input())
for i in range(1, n):
    print(' '*(n-i) + '*'*(2*i-1))
for i in range(n, 0, -1):
    print(' '*(n-i) + '*'*(2*i-1))
728x90
반응형
728x90
반응형

조합 문제이다.

단순히 조합을 계산하고 뒤에 0의 개수를 새면 시간 초과가 걸리기 때문에 효율적인 방법을 찾아야 된다.

아래의 코드가 처음에는 이해가 잘 안될수도 있다. 예시를 들어 풀다 보면 이해가 더 잘 될 것이다.

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

def cnt2(n):
    n2 = 0
    while(n != 0):
        n //= 2
        n2 += n
    return n2

def cnt5(n):
    n5 = 0
    while(n != 0):
        n //= 5
        n5 += n
    return n5

print(min(cnt2(n)-cnt2(m)-cnt2(n-m), cnt5(n)-cnt5(m)-cnt5(n-m)))
728x90
반응형
728x90
반응형

이미지에 필터를 돌린다는 느낌으로 범위를 설정하고 각 모서리의 값들이 같은지 확인하면 된다.

# ok는 break 용도

N, M = map(int, input().split())
m = min(N, M)
li = []
for _ in range(N):
    li.append(list(map(int, list(input()))))
ok = False

for l in range(m, 0, -1):
    if ok:
        break
    for i in range(N+1-l):
        if ok:
            break
        for j in range(M+1-l):
            if li[i][j] == li[i+l-1][j] == li[i+l-1][j+l-1] == li[i][j+l-1]:
                ans = l
                ok = True
                break
        
print(ans**2)
728x90
반응형
728x90
반응형

기본적으로 파일의 개수가 N개면 클러스터가 N개가 필요하다.

허나 파일의 크기가 0인 경우는 클러스터가 필요하지 않으므로 -1

파일의 크기가 클러스터의 크기보다 클 경우에는 파일의 크기에 클러스터의 크기를 나눈 몫 만큼 더해줘야 한다.

EX) 파일의 크기: [1200, 0], 클러스터의 크기: 512

cnt = 2(파일의 개수) 

-> cnt = cnt + (1200-1) // 512 - 1 = cnt + 2 - 1 = cnt + 1 = 3(결과값)

N = int(input())
li = list(map(int, input().split()))
S = int(input())
cnt = N

for s in li:
    if s > S:
        cnt += (s-1)//S
    elif s == 0:
        cnt -= 1
print(S*cnt)
728x90
반응형
728x90
반응형

아래는 처음 풀이 코드이다. 정답이긴 하지만 코드가 쓸데없이 길어서 짜면서 답답함을 느꼈다.

def easy(n):
    s = 0
    num, cnt = 1, 1
    while(1):
        for _ in range(num):
            if cnt == n+1:
                break
            s += num
            cnt += 1
        num += 1
        if cnt == n+1:
            break
    return s

A, B = map(int, input().split())
print(easy(B) - easy(A-1))

아래는 최종 풀이 코드이다.

위의 과정을 리스트의 합을 사용해 간단하게 구현했다.

A, B = map(int, input().split())
li = []
for i in range(1, 46):
    li += [i]*i
print(sum(li[A-1:B]))
728x90
반응형
728x90
반응형

단순 구현 문제이다. 그냥 조건에 맞게 반복문을 돌려주자.

N = int(input())
w = int(input())
li = [[0 for i in range(N)] for j in range(N)]
n = 1
    
x = y = N // 2
check = 2 
li[x][y] = n
i = 0
j = 0
while li[0][0] != N**2:
    x -= 1
    for i in range(check):
        n += 1
        li[x][y+i] = n
        if n == w:
            ans = [x+1, y+i+1]
    y += i
    for i in range(1, check+1):
        n += 1
        li[x+i][y] = n
        if n == w:
            ans = [x+i+1, y+1]
    x += i
    for i in range(1, check+1):
        n += 1
        li[x][y-i] = n
        if n == w:
            ans = [x+1, y-i+1]
    y -= i
    for i in range(1, check+1):
        n += 1
        li[x-i][y] = n
        if n == w:
            ans = [x-i+1, y+1]
    x -= i
    check += 2

for i in range(N):
    for j in range(N):
        print(li[i][j], end = ' ')
    print()
print(*ans)
728x90
반응형
728x90
반응형

입력이 n이라고 하자. n보다 작은 수는 몫이 0이지만 나머지는 0일 수가 없기 때문에 제외하고,

n의 제곱보다 큰 수는 몫이 n 보다 커져서 나머지와 같을 수가 없기 때문에 제외한다.

남은 범위에서 나머지와 몫이 같은 수를 찾으면 된다.

EX) n = 3 -> 1, 2, 3은 몫은 0이지만 나머지가 0보다 크기 때문에 같을 수가 없고,

10, 11, 12...는 몫은 3보다 큰데 나머지는 3보다 클 수가 없다.

결과적으로 4(3+1) ~ 9(3**2)의 범위에서 나머지와 몫이 같은 수를 찾아주면 된다.

n = int(input())
s = 0
for i in range(n+1, n**2, n+1):
    s += i
print(s)
728x90
반응형
728x90
반응형

우선 입력으로 들어오는 단어들을 리스트에 추가한다. 단 같은 단어가 여러 번 입력된 경우에는 추가 안 함.

 그 후 사전 순으로 정렬하고 lambda를 사용해 단어 길이 순으로 정렬해주면 된다.

li = []
for _ in range(int(input())):
    word = input()
    if word not in li:
        li.append(word)
li.sort()
li.sort(key=lambda x : len(x))
for word in li:
    print(word)
728x90
반응형
728x90
반응형

제일 작은 수부터 시작해서 약수가 3개 이상이 될 때까지 계속 반복문을 돌리면 된다.

li = list(map(int, input().split()))

n = min(li)
while 1:
    cnt = 0
    for i in li:
        if n % i == 0:
            cnt += 1
    if cnt > 2:
        break
    n += 1
print(n)
728x90
반응형
728x90
반응형

단순 구현 문제이다. 그냥 반복문 두번 써서 틀린 경우를 확인해주면 된다.

ans = 0
for i in range(8):
    li = list(input())    
    for j in range(8):
        if (i % 2) and (j % 2) and li[j] == 'F':
            ans += 1
        elif (i % 2 == 0) and (j % 2 == 0) and li[j] == 'F':
            ans += 1
print(ans)
728x90
반응형
728x90
반응형

본인이 전자공학과라 그런지 조금 반가웠다. 

그냥 사전을 하나 만들어 놓고 사용했다. 처음 2개는 str으로 합치고 마지막에 int로 바꿔서 곱해주면 된다.

dic = {'black': [0,1], 'brown': [1,10], 'red': [2,100], 'orange': [3,1000], 'yellow': [4,10000],
     'green': [5,100000], 'blue': [6,1000000], 'violet': [7,10000000], 'grey': [8,100000000],
     'white': [9,1000000000]}
li = []

for i in range(3):
    li.append(input())
print(int(str(dic[li[0]][0]) + str(dic[li[1]][0])) * dic[li[2]][1])
728x90
반응형

+ Recent posts