개발일기 [Python 파이썬]

[파이썬] AI 알고리즘 문제 : 기초 함수 01

neullo 2024. 3. 4. 13:53

컴퓨팅 사고란?

전산적 사고 (computational thinking, CT) 는 컴퓨터(사람이나 기계)가 효과적으로 수행될 수 있도록 문제를 정의하고 그에 대한 답을 기술하는 것이 포함된 사과 과정 일체를 일컫는다.

 

예를 들어, 무작위로 선택된 20장 카드를 뒷면이 보이게 놓고, 뒷면이 보이는 카드 중 하나를 뒤집고 오른쪽 카드도 뒤집는다고 하자. 그리고 뒷면이 보이는 카드가 남아 있는 동안 계속 반복하다보면 모든 카드가 앞면이 될 것이다. 이때 모든 카드가 앞면이 된다는 것을 증명해 보자. 알고리즘에는 입력값과 출력값이 있다. 

뒷면이 보이는 카드 중 하나를 뒤집고 오른쪽 카드도 뒤집는 경우 모든 카드가 앞면이 된다는 것을 증명해 보자

 

이 문제를 증명해 내는 방법으로 먼저 숫자로 정의내려 볼 수 있을 것이다. 카드가 앞면 보고 있다면 0 뒷면을 1 이라고 했을때, 첫 시작은 1111111111111 과 같을 것이다. 이것이 00000000이 되는 과정은 다음과 같다.

 

 

 

이런식으로 논리를 갖고 문제를 해결하며 증명해 내는 방법은 다양할 수 있고, 알고리즘도 개인에 따라 편차가 있을 것이다. 리스트가 작을 때는 크게 상관없을 수 있으나 이 리스트가 데이터가 쌓여감에 따라 커가면, 효율적으로 논리를 짜서 성능과 시간이 절약될 수 있는 시간 복잡도를 줄이는 것이 매우 중요하다. for 문을 사용해서 (1,2,3,4,5)에서 n 값을 찾는다고 하면, 끝에 있는 5를 찾을때 최악의 경우 배열의 길이만큼 순회해야 함으로 낭비되는 시간과 에너지가 많아질 것이다. 효율적이고 논리적인 알고리즘을 만들기 위해 기본적인 알고리즘을 풀어보자.

 

본격적으로 프로그래머스에서 알고리즘 함수문제를 풀어보자. 두 숫자를 빼고, 곱하고, 숫자를 비교해보고, 나머지 값을 구하고, 몫을 구해본다. 이후 나이를 유추해 보거나, 두 수를 합해보고, 나눗셈도 하며 각도기와 짝수의 합도 구해볼 것이다.

 Questions. 알고리즘 문제

두 수의 차
두 수의 곱
숫자 비교하기
나머지 구하기
몫 구하기
나이 출력
두 수의 합
두 수의 나눗셈
각도기
짝수의 합

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

***count = 0을 넣은 이유는 주어진 정수 n이 1 이하인 경우를 고려하여 초기값을 설정해주기 위해서입니다. 만약 n이 1보다 작은 경우에는 짝수가 없으므로 0을 반환해야 합니다. 그래서 count를 0으로 초기화하여 이런 경우를 처리할 수 있도록 합니다.

두 수의 차

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

def solution(num1, num2):
    return num1 - num2

# 입출력 예시 테스트
print(solution(2, 3))   # 출력: -1
print(solution(100, 2)) # 출력: 98

 

입출력 예 #1

  • num1이 2이고 num2가 3이므로 2 - 3 = -1을 return합니다.

입출력 예 #2

  • num1이 100이고 num2가 2이므로 100 - 2 = 98을 return합니다.

 


두 수의 곱 [ * ]

정수 num1num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

def solution(num1, num2):
    return num1 * num2

print(solution(3,4))
print(solution(27,19))

 

입출력 예 #1

  • num1이 3, num2가 4이므로 3 * 4 = 12를 return합니다.

입출력 예 #2

  • num1이 27, num2가 19이므로 27 * 19 = 513을 return합니다.

숫자 비교하기 [if == else ]

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

def solution(num1, num2):
    if num1 == num2:
        return 1
    else:
        return -1
    
print(solution(2,3))
print(solution(11,11))
print(solution(7,99))

 

입출력 예 설명 #1

  • num1이 2이고 num2가 3이므로 다릅니다. 따라서 -1을 return합니다.

입출력 예 설명 #2

  • num1이 11이고 num2가 11이므로 같습니다. 따라서 1을 return합니다.

입출력 예 설명 #3

  • num1이 7이고 num2가 99이므로 다릅니다. 따라서 -1을 return합니다.

나머지 구하기 [ % ]

정수 num1num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

def solution(num1, num2):
    return num1 % num2

print(solution(3,2))
print(solution(10,5))

 

입출력 예 #1

  • num1이 3, num2가 2이므로 3을 2로 나눈 나머지 1을 return 합니다.

입출력 예 #2

  • num1이 10, num2가 5이므로 10을 5로 나눈 나머지 0을 return 합니다.


몫 구하기 [ // ]

정수 num1num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

def solution(num1, num2):
    return num1 // num2

print(solution(10,5))
print(solution(7,2))

 

입출력 예 #1

  • num1이 10, num2가 5이므로 10을 5로 나눈 몫 2를 return 합니다.

입출력 예 #2

  • num1이 7, num2가 2이므로 7을 2로 나눈 몫 3을 return 합니다.

나이 출력

머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age 가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.

def solution(age):
    birth_year = 2022 - age + 1
    return birth_year

# 입출력 예시 테스트
print(solution(40))  # 출력: 1983
print(solution(23))  # 출력: 2000

 

입출력 예 #1

  • 2022년 기준 40살이므로 1983년생입니다.

입출력 예 #2

  • 2022년 기준 23살이므로 2000년생입니다.


두 수의 합

정수 num1 과 num2 가 주어질 때, num1과 num2 의 합을 return하도록 soltuion 함수를 완성해주세요.

def solution(num1, num2):
    return num1 + num2

 

입출력 예 #1

  • num1이 2이고 num2가 3이므로 2 + 3 = 5를 return합니다.

입출력 예 #2

  • num1이 100이고 num2가 2이므로 100 + 2 = 102를 return합니다.

두 수의 나눗셈

 

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100
def solution(num1, num2):
    result = (num1 / num2) * 1000
    return int(result)

# 입출력 예시 테스트
print(solution(3, 2))   # 출력: 1500
print(solution(7, 3))   # 출력: 2333
print(solution(1, 16))  # 출력: 62

** int를 사용한 이유는 문제에서 "정수 부분을 return"하라고 명시했기 때문입니다. 나눗셈 연산의 결과는 실수가 될 수 있지만, 문제에서 요구하는 것은 그 실수 값의 정수 부분입니다. 따라서 결과를 정수 부분만 남기기 위해 int를 사용

 

입출력 예 #1

  • num1이 3, num2가 2이므로 3 / 2 = 1.5에 1,000을 곱하면 1500이 됩니다.

입출력 예 #2

  • num1이 7, num2가 3이므로 7 / 3 = 2.33333...에 1,000을 곱하면 2333.3333.... 이 되며, 정수 부분은 2333입니다.

입출력 예 #3

  • num1이 1, num2가 16이므로 1 / 16 = 0.0625에 1,000을 곱하면 62.5가 되며, 정수 부분은 62입니다.

각도기

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

  • 예각 : 0 < angle < 90
  • 직각 : angle = 90
  • 둔각 : 90 < angle < 180
  • 평각 : angle = 180
def solution(angle):
    if angle > 0 and angle < 90:
        return 1
    elif angle == 90:
        return 2
    elif angle > 90 and angle < 180:
        return 3
    else:
        return 4

# 입출력 예시 테스트
print(solution(45))   # 출력: 1 (예각)
print(solution(90))   # 출력: 2 (직각)
print(solution(120))  # 출력: 3 (둔각)
print(solution(180))  # 출력: 4 (평각)

 

입출력 예 #1

  • angle이 70이므로 예각입니다. 따라서 1을 return합니다.

입출력 예 #2

  • angle이 91이므로 둔각입니다. 따라서 3을 return합니다.

입출력 예 #2

  • angle이 180이므로 평각입니다. 따라서 4를 return합니다.

짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

def solution(n):
    sum_of_even = 0
    for i in range(2, n+1, 2):  # 2부터 n까지의 짝수를 반복하여 더합니다.
        sum_of_even += i
    return sum_of_even

# 입출력 예시 테스트
print(solution(5))   # 출력: 6 (2 + 4)
print(solution(10))  # 출력: 30 (2 + 4 + 6 + 8 + 10)

 

입출력 예 설명

입출력 예 #1

  • n이 10이므로 2 + 4 + 6 + 8 + 10 = 30을 return 합니다.

입출력 예 #2

  • n이 4이므로 2 + 4 = 6을 return 합니다.

 

 

알고리즘 02탄 풀어보기 

 

코딩테스트 준비 문제 [알고리즘] 함수 문제 02

Questions. 알고리즘 문제 DAY 02ㅊ def solution(numbers): total = sum(numbers) average = total / len(numbers) return round(average) # 반올림하여 반환 numbers1 = [3, 17, 1, 39, 8, 41, 2, 32, 99, 2] numbers2 = [22, 8, 5, 123, 7, 2, 63, 7, 3, 46]

neulo.tistory.com