본문 바로가기

Problem Solving/Programmers

[프로그래머스] Level 1 짝수와 홀수/최대공약수와 최소공배수/콜라츠 추측/하샤드 수

짝수와 홀수.py

문제 설명

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

 

제한 조건

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.

문제풀이

def solution(num):
    return "Even" if num % 2 == 0 else "Odd"

 

함수 반환 값에 if문을 넣어 작성했다.

 

최대공약수와 최소공배수. py

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

제한 사항

  • 두 수는 1 이상 1000000 이하의 자연수입니다.

문제풀이

def gcd(x, y):
    while y:
        x, y = y, x%y
    return x

def lcm(x, y):
    return x * y // gcd(x, y)

def solution(x, y):
    return [gcd(x,y), lcm(x,y)]

 

유클리드 호제법(x, y의 최대 공약수는 x를 y로 나눈 나머지와 y의 최대공약수와 같다)을 검색해서 풀었다. 최대공약수와 최소공배수를 구하는 함수를 각각 만들고, solution 함수에서 결괏값을 반환했다.

* 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다.

 

 

콜라츠 추측.py

문제 설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

 

1-1. 입력된 수가 짝수라면 2로 나눕니다.

1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.

2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.

 

제한 사항

  • 입력된 수, num은 1 이상 8000000 미만인 정수입니다.

문제풀이

def solution(num):
    n = 0
    while num != 1:
        n += 1
        if num % 2 == 0:
            num = num / 2
        else:
            num = num * 3 + 1
        if n > 500:
            return -1
    return n

 

우선 입력값을 num으로 받았다. while문을 사용해 num이 1이 될 때까지 반복하도록 했고, if문을 사용해 짝수인 경우와 홀수인 경우로 나눠 계산했다.

 

반복 횟수를 구하기 위해 n을 사용했다. while문에서 반복할 때마다 n을 1씩 증가시키고, 500번을 초과하면 -1을 반환하도록 했다.

 

하샤드 수.py

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.

문제풀이

def solution(x):
    x_list = list(map(int, str(x)))
    sum = 0
    for i in range(len(x_list)):
        sum += x_list[i]
    return x % sum == 0

 

x를 문자열 형태로 바꾼 후 숫자 리스트 x_list로 변환시켰다. 그리고 리스트의 길이만큼 반복하는 for문을 만들어 각 리스트 요소를 sum에 더했다. 결괏값 출력에는 비교 연산자를 사용했다.

* map 에는 반복 가능한 객체(문자열, 리스트, 딕셔너리, 세트)를 넣을 수 있다.

 

 


 

 

코딩테스트 연습 - 짝수와 홀수

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 제한 조건 num은 int 범위의 정수입니다. 0은 짝수입니다. 입출력 예 num return 3 "Odd" 4 "Even"

programmers.co.kr

 

코딩테스트 연습 - 최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의

programmers.co.kr

 

코딩테스트 연습 - 콜라츠 추측

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2

programmers.co.kr

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr