Today I Learned

[TIL] 파이썬 알고리즘 문제풀이 강의 시작 / Sec.01-1~2, Sec.02-1 K번째 약수, 백준 10872 팩토리얼 [21-11-02]

목차

TIL

- 파이썬 알고리즘 문제풀이 강의 시작

- Sec.02-1 K번째 약수

- 백준 10872 팩토리얼

 


TIL

 오늘 지원서를 제출했다. 수많은 검토가 있었고 많은 준비를 했기 때문에 여한이 없다. 남은 기간까지 코테 준비에 집중하자!!

 지원서 제출 + 검토 시간 4 시간 내외, 알고리즘 강의 1시간 내외

 

 

파이썬 알고리즘 문제풀이 강의 시작(코딩 테스트 대비)

 

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8

 

파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의

파이썬을 이용한 코딩테스트 문제풀이를 합니다., [사진] 강좌를 다음과 같이 공부해 문제해결력을 기르기 바랍니다. 1. 문제와 자동채점폴더를 제공하니, 영상을 보기 전에 꼭 먼저 문제를 스스

www.inflearn.com

 코딩 테스트 준비를 위해 오늘부터 강의를 듣기 시작했다. 섹션 0이 파이썬 기초문법, 선수지식으로 이뤄져 있는데, 선수지식강의부터 차근차근 듣기로 했다. 기초 문법을 다시 복습하면서, 알게 되는 것들도 많아서 정리를 해두는 게 좋을까 생각이 든다.

 

1. 변수와 출력 함수

'''
변수명 정하기
 1) 영문과 숫자, _ 로 이루어진다.
 2) 대소문자를 구분한다.
 3) 문자나, _ 로 시작한다.
 4) 특수문자를 사용하면 안된다. (&, % 등)
 5) 키워드를 사용하면 안된다.(if, for 등)
'''

a = 1
A = 2
c = 3
print(a, A, c)

a = 1
A = 2
A1 = 3
print(a, A, A1)

a = 1
A = 2
A1 = 3
_b = 4
print(a, A, A1, _b)

# 주석
'''
여러줄 주석
'''

a, b, c = 3, 2, 1
print(a, b, c)

# 값 교환
a, b = 10, 20
print(a, b)
a, b = b, a
print(a, b)

# 변수 타입
# 메모리가 허용하는 만큼 크기 가능
a = 123455634654564566
print(a)
print(type(a))
# 실수형은 8바이트까지 저장 가능, 그 이상은 데이터 손실
a = 12.123456789123456789
print(a)
print(type(a))
a = 'student'
print(a)
print(type(a))

# 출력방식
print("number")
a, b, c = 1, 2, 3
print(a, b, c)
print("number : ", a, b, c)
# sep의 경우는 각각의 변수 사이에 넣은 값만큼 분리해준다
print(a, b, c, sep=', ')
print(a, b, c, sep=',')
print(a, b, c, sep='')
print(a, b, c, sep='\n')

'''
end의 경우, print함수는 항상 개행 되어지는데, 개행 대신에 
다른 값을 넣어 개행 말고 다른 형태가 되도록 한다.
'''
print(a, end=' ')
print(b, end=' ')
print(c)

 

2. 변수입력과 연산자

'''
변수입력과 연산자
'''
a = input("숫자를 입력하세요 : ")
print(a)

# split 띄어 쓰기로 분리하여 입력 받게 한다
a, b = input("숫자를 입력하세요 : ").split()
print(a + b)

print(type(a))
c = a + b
# 둘다 문자형 string이라서 값이 나오지 않고 string끼리 붙는다

print(type(c))
print(c)


a, b = input("숫자를 입력하세요 : ").split()
a = int(a)
b = int(b)
print(a + b)

# 위 처럼 하나하나 int하기 힘들다, map을 사용해보자
# map을 int형으로 봐꿔준다 여기서 int는 내장함수
# map(mapping)
a, b = map(int, input("숫자를 입력하세요 : ").split())
print(a + b)
print(a - b)
print(a * b)
print(a / b)
# //는 몫을 의미
print(a // b)
# %는 나머지를 의미
print(a % b)
# **는 a의 b진수, b승을 의미
print(a**b)


a = 4.3
b = 5
c = a + b
print(c)
print(type(c))

 

 

Sec.02-1 K번째 약수

 

내가 쓴 답안

n, k = map(int, input().split(" "))

divisor = []
for i in range(1, n + 1):
    if n % i == 0:
        divisor.append(i)

if k <= len(divisor):
    print(divisor[k - 1])
else:
    print(-1)

문제 풀이 시간 5분 내외

 

 

강사님 답안

n, k = map(int, input().split(" "))
cnt = 0
for i in range(1, n + 1):
    if n % i == 0:
        cnt += 1
    if cnt == k:
        print(i)
        break
else:
    print(-1)

 

 강사님 답안을 보고 새롭게 배운 것은 배열을 쓰지 않고, count 하여, 해당 약수의 몇 번째 인지 바로 구하게 한 것, 그리고 for문 안에서 break를 하지 않았으면 for문이 다 돌고 else 안에 들어간다는 것도 알았다.

 

 

 

백준 10872 팩토리얼

https://www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 너무나 쉬운 문제였다. factorial의 경우 재귀 함수인데, nb가 0일 때까지 계속 else로 돌게 한다. 재귀적 관계를 보는 것이 중요한데, factorial의 경우는, 아래와 같이 지금의 숫자와 그 수보다 1 작은 수의 팩토리얼의 곱이다. 이것이 팩토리얼의 정의이다. 각각의 호출 관계를 집중하여 풀었다.

 

nb = int(input())


def factorial(nb):
    if nb == 0:
        return 1
    else:
        return nb * factorial(nb - 1)


print(factorial(nb))

 문제 풀이 시간 1분 내외