본문 바로가기
python

[CodeUp] Python 기초 100제 6077~6098 풀이 해설

by Devinus 2021. 2. 28.

CodeUp 알고리즘 문제 6077번~6098번 문제의 답입니다.

찾는 문제 번호를 Ctrl + F 단축키로 검색을 하시면 더 빠르게 찾을 수 있습니다. (형식: # + 문제 번호, 예시: #6001)

 

문제의 답이 이해가 되지 않는 경우 댓글을 남겨주시면 이해를 돕기 위한 답변을 달아드립니다.

제 답이 최선의 정답 코드가 아닐 수도 있습니다. 더 나은 코드가 있다면 댓글로 알려주세요.

Python 기초 100제 다른 번호 문제 풀이 확인하기

#6077
n = int(input())
s = 0
for i in range(n + 1):
    if(i % 2 == 0):
        s += i
print(s)
#6078
c = ''
while(c != 'q'):
    c = input()
    print(c)
#6079
n = int(input())
i = 0
s = 0
while(s < n):
	i += 1
	s += i
print(i)
#6080
n, m = map(int, input().split())
for i in range(1, n + 1):
    for j in range(1, m + 1):
        print('{} {}'.format(i, j))
#6081
n = input()
for i in range(1, 15 + 1):
	print('%x*%x=%x'.upper() %(int(n, 16), int(hex(i), 16), (int(n, 16) * int(hex(i), 16))))
#6082
n = int(input())
for i in range(1, n + 1):
    if(i % 10 == 3 or i % 10 == 6 or i % 10 == 9):
        print('X', end = ' ')
    else:
        print(i, end = ' ')
#6083
a, b, c = map(int, input().split())
count = 0
for i in range(a):
	for j in range(b):
		for k in range(c):
			print('{} {} {}'.format(i, j, k))
			count += 1
print(count)
#6084
h, b, c, s = map(int, input().split())
mb = round((h * b * c * s / 8) / 1024 / 1024, 1)
print('{} MB'.format(mb))
#6085
w, h, b = map(int, input().split())
mb = round(((w*h*b) / 8 / 1024 / 1024), 2)
print('{:.2f} MB'.format(mb))
#6086
n = int(input())
total = 0
for i in range(1, n + 1):
    total += i
    if(total >= n):
        break
print(total)
#6087
n = int(input())
for i in range(1, n + 1):
    if(i % 3 == 0):
        pass
    else:
        print(i)
#6088
a, b, n = map(int, input().split())
total = a
for i in range(a, a + n - 1):
	total += b
print(total)
#6089
a, b, n = map(int, input().split())
total = a
for i in range(a, a + n - 1):
	total *= b
print(total)
#6090
a, m, d, n = map(int, input().split())
total = a
for i in range(a, a + n - 1):
	total = total * m + d
print(total)
#6091
a, b, c = map(int, input().split())
d = 1
while d % a != 0 or d % b != 0 or d % c != 0:
    d += 1
print(d)
#6092
from random import randint
n = int(input())
temp = [0] * 23
nums = input().split()
for i in nums:
    temp[int(i)-1] += 1
for i in temp:
    print(i, end=' ')
#6093
n = int(input())
nums = input().split()
nums.reverse()
for i in nums:
    print(int(i), end=' ')
#6094
n = int(input())
nums = map(int, input().split())
print(min(nums))
#6095
li = [[0 for i in range(19)] for j in range(19)]
n = int(input())
for i in range(n):
    x, y = map(int, input().split())
    if(li[x-1][y-1] != 1):
        li[x-1][y-1] = 1
for i in li:
	print(' '.join(map(str, i)))
#6096
li = []
for i in range(19):
    li.append([])
    k = input().split()
    for e in k:
        li[i].append(int(e))
n = int(input())
x = []
y = []
for i in range(n):
    a, b = map(int, input().split())
    for j in range(19):
        li[a-1][j] = 1 if li[a-1][j] != 1 else 0
        li[j][b-1] = 1 if li[j][b-1] != 1 else 0
for i in li:
    print(' '.join(map(str, i)))
#6097
li = []
h, w = map(int, input().split())
for i in range(h):
	li.append([])
	for j in range(w):
		li[i].append(0)
n = int(input())
for i in range(n):
    l, d, x, y = map(int, input().split())
    for j in range(l):
        if d == 0:
            li[x-1][y-1] = 1
            y += 1
        else:
            li[x-1][y-1] = 1
            x += 1
for i in li:
    print(' '.join(map(str, i)))
#6098
li = []
for i in range(10):
    li.append([])
    k = input().split()
    for e in k:
        li[i].append(int(e))
x, y = 1, 1
flag = True

while flag:
    if li[x][y] == 2:
        li[x][y] = 9
        flag = False
    elif (li[x][y+1]) == 1:
        if li[x+1][y] == 1:
            li[x][y] = 9
            flag = False
        else:
            li[x][y] = 9
            x += 1
    else:
        li[x][y] = 9
        y += 1
for i in li:
    print(' '.join(map(str, i)))

주목할 만한 python 문법

 

1. list comprehension: 리스트 컴프리헨션

파이썬은 다른 언어와 달리 특이한 문법을 가지고 있는데 바로 리스트 컴프리헨션이다. 리스트 컴프리헨션이란 파이썬의 자료형 중 하나인 리스트의 값을 할당할 때 편리하게 리스트를 정의하는 방법이다.

예를 들어 리스트 컴프리헨션이 없이 리스트에 1부터 10까지의 숫자 리스트를 할당하는 예시 코드를 보자.

# 리스트의 값을 각각 타이핑해 정의하는 방법
>>> li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> li
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 빈 리스트를 만들고 for반복문을 이용해 리스트의append()함수를 이용해 정의하는 방법
>>> li = []
>>> for i in range(1, 10+1):
	li.append(i)

	
>>> li
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

첫 번째 방법인 타이핑하는 방법은 특정한 값을 넣어야 하는 경우를 제외하고 위처럼 순차적이거나 일정 패턴이 존재하는 경우 입력해야 할 데이터가 많아질수록 프로그래밍이 아닌 단순 노동에 가깝게 된다.

두 번째 방법은 첫 번째 방법보다는 단순 타이핑 작업이 줄어들어 간편해졌다. 이 방법은 빈 리스트를 만들고, for 반복문을 작성하고, 리스트의 메서드를 호출해서 값을 추가시키는 작업을 해야 한다.

그러나 리스트 컴프리헨션을 이용해서 위 코드와 동일한 작업을 한 줄만 작성하여 수행할 수 있다.

 

1.1. 리스트 컴프리헨션 기본 사용법

리스트 컴프리헨션은 기본적으로 [할당할 값 for 순차적으로 받을 변수 in 이터레이터]와 같이 사용한다.

# 리스트 컴프리헨션을 이용해 정의하는 방법
>>> li = [i for i in range(1, 10+1)]
>>> li
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 리스트 컴프리헨션의 다양한 사용 예1
>>> li = [i*2 for i in range(1, 10+1)]
>>> li
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# 리스트 컴프리헨션의 다양한 사용 예2
>>> num = [10, '20', 30, '40', 50]
>>> li = [x for x in num]
>>> li
[10, '20', 30, '40', 50]

# 리스트 컴프리헨션의 다양한 사용 예2
>>> li = [x*2 for x in num]
>>> li
[20, '2020', 60, '4040', 100]

위 예제들을 보면서 '이렇게 하나 저렇게 하나 거기서 거기 아니야?'라고 생각할 수도 있다. 하지만 프로그래밍을 하다 보면 엄청난 양의 코드를 작성하게 될 텐데 그 수많은 코드 중에 같은 기능을 하는 코드를 보다 간결하고 이해하기 쉽도록 작성하면 보기도 좋고 차후에 유지보수도 하기 좋은 코드를 만들 수 있을 것이다.

 

1.2. 리스트 컴프리헨션 조건 추가

리스트 컴프리헨션은 또한 조건문을 추가시켜 값을 필터링할 수 있다. 사용 방법은 [할당할 값 for 순차적으로 받을 변수 in 이터레이터 if 조건]으로 조건에 참인 경우 값만 할당된다.

# 리스트 컴프리헨션에 조건을 추가해 필터링하는 방법
>>> li = [i*2 for i in range(1, 10+1) if i % 2 == 0]
>>> li
[4, 8, 12, 16, 20]

 

1.3. 중첩된 리스트 컴프리헨션 

리스트 컴프리헨션은 중첩된 for문과 동일한 작업을 할 수 있도록 작성할 수도 있다.

# 리스트 컴프리헨션 없이 중첩된 for문으로 리스트에 값 할당하는 방법
>>> li = []
>>> for i in range(5):
	for j in range(5):
		li.append(i*j)

		
>>> li
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16]

# 리스트 컴프리헨션을 이용해 중첩된 for문과 동일하게 값 할당하는 방법
>>> li = [i*j for i in range(5) for j in range(5)]
>>> li
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16]

# 리스트 컴프리헨션에서 중첩for문과 조건문 사용 예
>>> li = [i*j for i in range(5) for j in range(5) if i*j % 2 != 0]
>>> li
[1, 3, 3, 9]

오늘까지 해서 CodeUp 사이트에 출제된 python 기초 100제(문항 수는 #6098가 마지막)를 다 풀어봤다. 파이썬을 몇 달 전에 doit! Jump to python 책을 통해 한 달 정도 공부했던 것을 기반으로 기본 문법들을 복습하는 느낌으로 풀다가 해결이 잘 되지 않는 부분이 나오면 책과 구글링을 통해 관련된 코드 작성 기법을 학습한 뒤 다시 풀어보며 첫 번째 문제부터 마지막 문제까지 다 풀어보게 됐다. 사이트 문제집 이름처럼 진짜 python의 기초에 대한 내용을 다루고 있으며 이것을 다 풀었다고 공부가 끝난 것이 아닌 더욱 다양하고 창의적인 알고리즘 문제를 풀기 위한 티켓을 얻었다고 생각하고 더욱 깊게 공부해봐야겠다.

2021.02.25 - [Programming Language/python] - [CodeUp] Python 기초 100제 6001~6031 풀이 해설

 

[CodeUp] Python 기초 100제 6001~6031 풀이 해설

CodeUp 알고리즘 문제 6001번~6031번 문제의 답입니다. 찾는 문제 번호를 Ctrl + F 단축키로 검색을 하시면 더 빠르게 찾을 수 있습니다. (형식: # + 문제번호, 예시: #6001) 문제의 답이 이해가 되지 않는

devinus.tistory.com

2021.02.26 - [Programming Language/python] - [CodeUp] Python 기초 100제 6032~6045 풀이 해설

 

[CodeUp] Python 기초 100제 6032~6045 풀이 해설

CodeUp 알고리즘 문제 6032번~6044번 문제의 답입니다. 찾는 문제 번호를 Ctrl + F 단축키로 검색을 하시면 더 빠르게 찾을 수 있습니다. (형식: # + 문제 번호, 예시: #6001) 문제의 답이 이해가 되지 않

devinus.tistory.com

2021.02.27 - [Programming Language/python] - [CodeUp] Python 기초 100제 6046~6076 풀이 해설

 

[CodeUp] Python 기초 100제 6046~6076 풀이 해설

CodeUp 알고리즘 문제 6046번~6076번 문제의 답입니다. 찾는 문제 번호를 Ctrl + F 단축키로 검색을 하시면 더 빠르게 찾을 수 있습니다. (형식: # + 문제 번호, 예시: #6001) 문제의 답이 이해가 되지 않

devinus.tistory.com