올바른 알고리즘 이란 어떠한 경우에도 실행 결과가 똑같이 나오는 것. 만약 알고리즘의 실행 결과가 어떤 경우에는 맞고 어떤 경우에는 틀리면 올바른 알고리즘이라고 할 수 없음.

1. 알고리즘 기초

반복문

  1. 가우스 덧셈

    n = int(input("n 값을 입력하세요.: "))
    sum = 0
    
    """
    // 은 몫 연산자(floor division)임
    숫자를 나눈 몫에 더해줌
    """
    sum = n * (n + 1) // 2
    
    print(f"1부터 {n}까지 정수의 합은 {sum}입니다.")
    
  2. a 부터 b 까지 정수의 합 구하기

    a = int(input("정수 a를 입력하세요.: "))
    b = int(input("정수 b를 입력하세요.: "))
    
    if a > b:
        # a와 b를 교환, 무조건 a가 b보다 작게됨
        a, b = b, a
    
    sum = 0
    for i in range(a, b + 1):
        sum += i
    
    print(f"{a}부터 {b}까지 정수의 합은 {sum}입니다.")
    
  3. 반복 문에서 _ 사용

    # i 와 같이 반복 문 내 순환하며 반환하는 값이 필요 없을 경우 _ 사용
    # n이 짝수일 경우 절반 출력, 12 입력 시 6번 반복
    for _ in range(n // 2):
        print("+-", end="")
    
  4. n = int(input("몇 개를 출력할까요?: "))
    w = int(input("몇 개마다 줄바꿈할까요?: "))
    
    # n을 w로 나눠 반복, * 를 w개 출력
    # ex) 10, 3 입력 시 3번 반복 하는데, * 3개씩 출력
    for _ in range(n // w):
        print("*" * w)
    
    # n을 w로 나눈 값 중, 나머지가 있을 경우
    # 나머지 값을 곱하여 * 출력
    # ex) 10, 3 입력 시 나머지 값은 1, * 1개 출력
    rest = n % w
    if rest:
        print("*" * rest)
    
  5. 가로, 세로 길이가 정수이고 넓이가 area인 직사격형에서 변의 길이 나열하기

    area = int(input("직사각형의 넓이를 입력하세요.: "))
    
    # 약수를 나열
    for i in range(1, area + 1):
        # i가 area의 제곱근보다 크면 종료
        # ex) 32의 제곱근은 5.65, 6부터는 32의 약수가 나오지 않음, i 가 6일 때 종료
        if i * i > area:
            break
            
        # area를 i로 나누어 나머지가 없을 경우
        # ex) 32를 1로 나누면 나머지가 없음, 1은 32의 약수
        # ex) 32를 2로 나누면 나머지가 없음, 2는 32의 약수
        # ex) 32를 3로 나누면 나머지가 있음, 3은 32의 약수가 아님
        # ex) 32를 4로 나누면 나머지가 없음, 4는 32의 약수
        # ex) 32를 5로 나누면 나머지가 있음, 5는 32의 약수가 아님
        if area % i:
            continue
            
        # i와 area // i를 출력
        # //는 몫 연산자
        # ex) 1로 나눈 몫은 32, 32 // 1 = 32
        # ex) 2로 나눈 몫은 16, 32 // 2 = 16
        # ex) 4로 나눈 몫은 8, 32 // 4 = 8
        print(f"{i} x {area // i}")
    
  6. for문 조건에 list 두개 사용하기

    # 1부터 12까지 8을 건너뛰고 출력하기
    # for문 내 list를 두개 사용
    
    for i in list(range(1, 8)) + list(range(9, 13)):
        print(i, end=" ")
    
  7. 드모르간의 법칙

    # 2자리 양수만 입력 받기
    
    while True:
        no = int(input("2자리 양수를 입력하세요.: "))
        # 드모르간의 법칙 사용
        if not(no < 10 or no > 99):
            break
    
    print(f"입력받은 양수는 {no}입니다.")
    
  8. 공백과 출력으로 이등변 삼각형 그리기

    n = int(input("짧은 변의 길이를 입력하세요.: "))
    
    for i in range(n):
    
        # n - i - 1 만큼 공백 출력
        # ex) 10 입력 시 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
        for _ in range(n - i - 1):
            print(" ", end="")
            
        # i + 1 만큼 * 출력
        # ex) 10 입력 시 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        for _ in range(i + 1):
            print("*", end="")
        print()
    

2. 기본 자료구조와 배열

자료구조