211009 알고리즘

이은택·2021년 10월 9일
0

알고리즘

목록 보기
5/15
post-thumbnail

코드잇 파이썬 기초문제


range 연습

numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

# 인덱스와 원소 출력
# 코드를 입력하세요.
for i in range(len(numbers)):
    print("{} {}".format(i, numbers[i]))

거듭제곱

for i in range(11):
    print("2^{} = {}".format(i, 2**i))

for문으로 구구단

for i in range(1,10):
    for j in range(1,10):
        print("{} * {} = {}".format(i, j, i * j))

피타고라스 삼조

1차시도 문제점

  • 문제에서 제시하는 '단하나'라는 단서를 a < b, b < a 가 될수 없으니 a = b로 해석을 하고 풀이함
  • 프로그래밍 문제를 수학적으로 계산해서 하나의 값을 도출 하는 형식으로함

✔2차시도 - 18분

힌트

for a in range(400):
    for b in range(400):
        for c in range(400):

풀이

for a in range(400):
    for b in range(400):
        if a < b: 
            for c in range(400):
                if b < c:
                    if a**2 + b**2 == c**2 and a + b + c == 400:
                        print(a * b * c)

🙄비효율적인 코드

✔3차 효율적인코드로 짜기 - 10분

힌트

c=400−a−b

풀이

📌for c in range(400): 대신에 a와 b값으로 c값을 구하는 변수를 지정함으로써 3번 중첩루프를 돌려야되었던것을 2번만 중첩하게함으로 연산량이 훨씬 적어짐

for a in range(400):
    for b in range(400):
        if a < b:
📌           c = 400 - a - b 
            if b < c:
                if a**2 + b**2 == c**2:
                    print(a * b * c)

4차 Code Refactoring

풀이

📌 a<b 조건과 for b in range(400):을 한줄로 적으려면 a보다 적은 b숫자는 필요 없으니 range(a,400)을 사용하면 보다 간결해진다.

for a in range(400):
📌    for b in range(a, 400):
        c = 400 - a - b
        if b < c and a**2 + b**2 == c**2:
            print(a * b * c)

리스트 뒤집기

numbers = [2, 3, 5, 7, 11, 13, 17, 19]

# 리스트 뒤집기
# 코드를 입력하세요.
max_range = len(numbers) // 2
len_of_numbers = len(numbers)
📌for i in range(max_range):
    front = numbers[i]
    back = numbers[len_of_numbers - 1 - i]
    numbers[i] = back
    numbers[len_of_numbers - 1 - i] = front

print("뒤집어진 리스트: " + str(numbers))

📌unpacking으로 풀기

for i in range(max_range):
    numbers[i], numbers[len_of_numbers - 1 - i] = numbers[len_of_numbers - 1 - i], numbers[i]
profile
도전!

0개의 댓글