AIVLE TIL ('23.02.02) - Phtyon 알고리즘

cjkangme·2023년 2월 2일
0

에이블스쿨

목록 보기
2/81
post-thumbnail
post-custom-banner

무엇을 배웠나?

  • 알고리즘 개념 : 알고리즘은 문제 해결을 위한 일련의 절차다

  • 플로우 차트 : 알고리즘을 일정한 형식의 차트로 나타낸 것.
    꼭 플로우 차트 형식은 아니더라도, 개념을 잡고 손으로 써보는 것이 좋은 방법이다.

    이번 주말 ToDo : 슈도코드 작성법을 배워보자!

  • 코드 검증 과정 : 알고리즘이 잘 작동하는지 검증하는 과정
    손으로 따라가면서 검증하는 것도 좋지만, 최고는 발생할 수 있는 모든 경우를 가능한 한 직접 테스트 해보는 방법이 좋다.

  • 조건문과 분기 : if, elif, else

  • 반복문 : while, for loop

  • 무한 루프 : break, continue

  • 반복문과 조건문, 반복문과 반복문 조합

새롭게 배운 것

  • 다양한 실습 예제 문제를 배운 범위만을 사용해서 풀어보았다. 모듈에 의존하지 않고 푸는 과정을 통해 문제에 접근 하는 방법이나, 미리 알고리즘을 생각하는 능력이 조금이나마 상승한 것 같다.

  • VS Code로 Jupyter Notebook을 사용하면서 다양한 단축키 사용법을 배웠다.

이번 주말 ToDo : Jupyter Notebook 단축키 정리하기

기타

실습 풀이

더하기 사이클

문제 : https://www.acmicpc.net/problem/1110

  • 풀이
N = int(input())

temp = N
count = 0

while True:
    left = temp % 10
    right = temp//10 + temp%10
    
    temp = left*10 + right%10
    count += 1
    
    if temp == N:
        break

print(count)

백준 브론즈1 문제로 이미 풀어봤던 문제이다.

당시에는 한창 끙끙대다가 str() 함수를 이용해서 요리조리 풀었던 것 같은데, 그걸 안쓰려고 하다보니 깔끔한 코드가 나왔다.

코드 길이, 시간 모두 단축된 것을 보니 두 달만에 많이 발전한 것 같아 뿌듯하다.
같은 문제를 오랜만에 다시 풀어보는 것도 성취도 느끼면서 또 새롭게 공부할 수 있는 방법인 것 같다.

정수 제곱근 판별

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12934

  • 풀이
def solution(n):
    answer = -1
    left = 1
    right = n
    while True:
        mid = (left+right) // 2
        pwr = mid ** 2
        if pwr == n:
            answer = (mid+1) ** 2
            break
        elif pwr > n:
            right = mid-1
        else:
            left = mid+1
            
        if left > right:
            break
    
    
    return answer

원래였다면 math 모듈의 isqrt 함수를 이용했을 텐데, 모듈 없이 풀어보고자 했다.
입력범위 최대값이 50000000000000이라 제곱근 없이 어떻게 풀지를 고민했는데 이분탐색을 이용하면 된다는 것을 떠올렸다.

사실 이분탐색을 배우기만 했지 한번도 문제 풀이에 적용해본적이 없었다.
이번 기회에 활용법을 직접 깨달았으니 문제 풀이에 적용해봐야겠다.

post-custom-banner

0개의 댓글