n의 배수, 공배수, 홀짝에 따라 다른값 반환하기, 조건 문자열, flag에 따라 다른값 반환하기

1. n의 배수

  • 정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.
  • 2 ≤ num ≤ 100
  • 2 ≤ n ≤ 9
num n result
98 2 1
34 3 0
  • 입출력 예 #1
    • 98은 2의 배수이므로 1을 return합니다.
  • 입출력 예 #2
    • 32는 3의 배수가 아니므로 0을 return합니다.
1
2
3
def solution(num, n):
    answer = 0
    return answer
  • 나머지 개념을 응용한다면 쉽게 풀 수 있는 문제
  • 특정 정수의 배수가 되는 경우는 해당 정수로 나눈 값이 0이되는 경우이다.
  • 조건문을 사용해서 num % n 이 0이면 숫자 1을 출력하고, 아닌 경우 0을 출력하도록 작성
1
2
3
4
5
6
def solution(num, n):
    if num % n == 0:
        answer = f"{num}{n}의 배수이므로 1을 return합니다."
    else:
        answer = f"{num}{n}의 배수가 아니므로 0을 return합니다."
    return answer
  • 입출력 예에서 fstring을 활용한 ‘문장’ 을 출력하는 것이 답이라고 생각했는데, 실제 답은 경우에 따라 1인지 0인지만 출력하면 되는 것이었음
  • 입출력 예 에 제시된 표만 보면 되는데, 입출력 예 설명 부분을 출력값 이라고 오해해서 오답 발생
1
2
3
4
5
6
def solution(num, n):
    if num % n == 0:
        answer = 1
    else:
        answer = 0
    return answer
  • 양자택일식의 간단한 조건문은 삼항연산자를 쓰면 더 간결한 코드로 풀어 낼 수 있음
1
2
def solution(num, n):
    return 1 if num % n == 0 else 0
1
2
3
4
5
6
7
8
테스트 1
입력값 	98, 2
기댓값 	1
실행 결과 	테스트를 통과하였습니다.
테스트 2
입력값 	34, 3
기댓값 	0
실행 결과 	테스트를 통과하였습니다.
  • 문제를 읽을때 입출력 예 를 더 중점적으로 볼 것
  • 나머지의 개념과 조건문을 사용할 수 있다면 손쉽게 풀 수 있는 문제

2. 공배수

  • 정수 number와 nm이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.
  • 10 ≤ number ≤ 100
  • 2 ≤ nm < 10
number n m result
60 2 3 1
55 10 5 0

입출력 예 #1

  • 60은 2의 배수이면서 3의 배수이기 때문에 1을 return합니다.

입출력 예 #2

  • 55는 5의 배수이지만 10의 배수가 아니기 때문에 0을 return합니다.
1
2
3
def solution(number, n, m):
    answer = 0
    return answer
  • 1번 문제와 마찬가지로 나머지 개념과 조건문을 응용하면 풀 수 있음
  • 두 가지 조건을 모두 만족하는 경우가 추가되었으므로 and 조건으로 조건문을 추가하면 풀 수 있음
  • number % nnumber % m 이 모두 0인경우에 1을 출력하도록 조건문 설정
1
2
def solution(number, n, m):
    return 1 if number % n == 0 and number % m ==0 else 0
1
2
3
4
5
6
7
8
테스트 1
입력값 	60, 2, 3
기댓값 	1
실행 결과 	테스트를 통과하였습니다.
테스트 2
입력값 	55, 10, 5
기댓값 	0
실행 결과 	테스트를 통과하였습니다.
  • 나머지, 조건문, and 조건 설정 3가지를 알면 풀 수 있는 문제

3. 홀짝에 따라 다른 값 반환하기

  • 양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
  • • 1 ≤ n ≤ 100
n result
7 16
10 220
  • 입출력 예 #1
    • 예제 1번의 n은 7로 홀수입니다. 7 이하의 모든 양의 홀수는 1, 3, 5, 7이고 이들의 합인 1 + 3 + 5 + 7 = 16을 return 합니다.
  • 입출력 예 #2
    • 예제 2번의 n은 10으로 짝수입니다. 10 이하의 모든 양의 짝수는 2, 4, 6, 8, 10이고 이들의 제곱의 합인 $2^2 + 4^2 + 6^2 + 8^2 + 10^2 = 4 + 16 + 36 + 64 + 100 = 220$ 을 return 합니다.
1
2
3
def solution(n):
    answer = 0
    return answer
  • 정수 n이 2로 나눠진다면 짝수, 아니면 홀수 라는 개념을 적용해서 짝수/홀수를 판단할 수 있음
  • 나머지는 조건식에 따라 덧셈 또는 제곱근 연산을 하여 변수에 담아내면 풀 수 있음
  • 입력된 정수 n 이 짝수인지 홀수 인지 판별
  • 0부터 입력된 정수 n 이하의 짝수/홀수를 같은 방식으로 판별 하며 추출(for 문사용)
    • 추출된 수들을 조건에 맞게 연산
      • 짝수인 경우 : 덧셈 연산을 하여 answer 변수에 추가
      • 홀수인 경우 : 제곱근 연산을 하여 answer 변수에 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(n):
    odd = 0  # 홀수를 저장할 변수
    even = 0  # 짝수를 저장할 변수

    # n이 홀수인 경우
    if n % 2 != 0:
        for num in range(0, n+1):  # 0부터 n까지 순회
            if num % 2 != 0:  # 홀수인 경우
                odd += num  # 홀수 더하기
        answer = odd  # 결과 저장

    # n이 짝수인 경우
    else:
        for num in range(0, n+1):  # 0부터 n까지 순회
            if num % 2 == 0:  # 짝수인 경우
                even += num ** 2  # 짝수의 제곱 더하기
        answer = even  # 결과 저장

    return answer  # 결과 반환
  • 조건이 여러개로 나뉘다보니 코드가 많이 길어 지고 있음
  • 최초의 정수 n 이 홀수 인지 짝수인지를 구분하는건 불가피해도 나머지는 더 간결하게 작성할 수 있음
  • list comprehension 개념을 적용해서 풀면 더 쉽게 풀어낼 수 있을 것 같다.
1
2
3
4
5
6
7
def solution(n):
    if n % 2 != 0:
        # n이 홀수인 경우, 1부터 n까지의 홀수들의 합을 구합니다.
        return sum([num for num in range(1, n+1) if num % 2 != 0])
    else:
        # n이 짝수인 경우, 0부터 n까지의 짝수들의 제곱의 합을 구합니다.
        return sum([num ** 2 for num in range(0, n+1) if num % 2 == 0])
1
2
3
4
5
6
7
8
테스트 1
입력값 	7
기댓값 	16
실행 결과 	테스트를 통과하였습니다.
테스트 2
입력값 	10
기댓값 	220
실행 결과 	테스트를 통과하였습니다.
  • 홀수와 짝수 구분부터, for문, 조건문 등 다양한 요소들을 활용해야 했다.
  • 조건문을 사용해서 한단계씩 풀어간 것은 좋은데 list comprehension과 sum 개념을 생각하지 못한건 다소 아쉽다.

4. 조건 문자열

  • 문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.
  • 두 수가 n과 m이라면
    • ”>”, “=” : n >= m
    • ”<”, “=” : n <= m
    • ”>”, “!” : n > m
    • ”<”, “!” : n < m

두 문자열 ineq와 eq가 주어집니다. ineq는 “<”와 “>”중 하나고, eq는 “=”와 “!”중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

  • • 1 ≤ nm ≤ 100
ineq eq n m result
”<” ”=” 20 50 1
”>” ”!” 41 78 0
  • 입출력 예 #1
    • 20 <= 50은 참이기 때문에 1을 return합니다.
  • 입출력 예 #2
    • 41 > 78은 거짓이기 때문에 0을 return합니다.
1
2
3
def solution(ineq, eq, n, m):
    answer = 0
    return answer
  • 함수에 입력된 문자열들을 조합해서 나올 수 있는 경우의 수만큼 조건문을 적용해서 각각의 경우에 대한 연산결과를 return해야 함
  • 문제에 나온대로 두 수의 크기를 비교하는 경우의 수 4가지를 각각 조건문으로 구현
  • 그 안에 비교식이 성립하는 경우와 아닌 경우를 다시 각각 조건문으로 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def solution(ineq, eq, n, m):
    answer = 0  # 결과를 저장할 변수 초기화(조건 불만족시 0이 return되는 용도)

    # ineq이 '>' 이고 eq이 '=' 일 경우
    if ineq == ">" and eq == "=":
        if n >= m:  # n이 m보다 크거나 같을 경우
            answer = 1  # 결과값을 1로 설정

    # ineq이 '<' 이고 eq이 '=' 일 경우
    elif ineq == "<" and eq == "=":
        if n <= m:  # n이 m보다 작거나 같을 경우
            answer = 1  # 결과값을 1로 설정

    # ineq이 '>' 이고 eq이 '!' 일 경우
    elif ineq == ">" and eq == "!":
        if n > m:  # n이 m보다 클 경우
            answer = 1  # 결과값을 1로 설정

    # ineq이 '<' 이고 eq이 '!' 일 경우
    elif ineq == "<" and eq == "!":
        if n < m:  # n이 m보다 작을 경우
            answer = 1  # 결과값을 1로 설정

    return answer  # 결과값 반환
  • 문제를 1차원적으로 푼다고 가정했을 때 지금도 충분히 조건을 만족하면서 풀어내고 있음
  • 다만 조금 더 손쉽게 풀 수 있는 방법은 없는걸까 찾아보다가 새로운 방법을 발견
1
2
3
4
5
6
7
8
9
10
11
def solution(ineq, eq, n, m):
		# 문제에 제시된 조건을 튜플형태의 dict로 설정
    conditions = {
        (">", "="): n >= m,
        ("<", "="): n <= m,
        (">", "!"): n > m,
        ("<", "!"): n < m
    }
		# conditions.get() : dict의 value 부분이 True이면 1을 return
		# False인 경우 get()의 두번째 인자인 0을 return 
    return int(conditions.get((ineq, eq), 0))
  • 함수에서 입력받은 ineqeq 를 conditions의 key에 매칭하여 일치하는 value값에 nm 의 값을 적용
  • 적용한 결과가 True 이면, 즉 비교식이 성립하면 True 이므로 conditions.get() 의 결과로서 True를 return
  • solution함수의 return값은 int()로 해두었으므로 conditions.get()이 True인 경우 1이 return
    • 반대로 conditions.get()이 False인 경우, 설정해둔대로 0이 return
1
2
3
4
5
6
7
8
테스트 1
입력값 	"<", "=", 20, 50
기댓값 	1
실행 결과 	테스트를 통과하였습니다.
테스트 2
입력값 	">", "!", 41, 78
기댓값 	0
실행 결과 	테스트를 통과하였습니다.
  • 조건식과 비교식을 잘 설정한다면 차근 차근 풀어낼 수 있는 문제
  • 조건을 복잡하게 쓰지 않고 dict을 활용해서 풀 수도 있다는 점은 미처 알지 못했던 부분
  • 문제 풀이에 대한 로직이 명확하다면 쉽게 적용할 수 있을지는 모르겠으나 바로 떠올려서 풀 수 있는 방법은 아닌 것 같음
  • 개인적으로는 글을써도 풀어쓰는걸 좋아해서 그런지 dict를 응용해서 푸는 문제 같은 경우는 한번에 이해가 되지 않아 선호가 되지 않는 방식이긴하다.

5. flag에 따라 다른 값 반환하기

  • 두 정수 ab와 boolean 변수 flag가 매개변수로 주어질 때, flag가 true면 a + b를 false면 a - b를 return 하는 solution 함수를 작성해 주세요.
  • -1,000 ≤ ab ≤ 1,000
a b flag result
-4 7 true 3
-4 7 false -11
  • 입출력 예 #1
    • 예제 1번에서 flag가 true이므로 a + b = (-4) + 7 = 3을 return 합니다.
  • 입출력 예 #2
    • 예제 2번에서 flag가 false이므로 a - b = (-4) - 7 = -11을 return 합니다.
1
2
3
def solution(a, b, flag):
    answer = 0
    return answer
  • flag에 따른 연산식을 각각 조건으로 설정해서 return하도록 하는 문제
  • flag가 True인 경우와 아닌 경우에 대한 연산식을 조건문으로 작성
1
2
def solution(a, b, flag):
    return a + b if flag == True else a - b
1
2
3
4
5
6
7
8
테스트 1
입력값 	-4, 7, true
기댓값 	3
실행 결과 	테스트를 통과하였습니다.
테스트 2
입력값 	-4, 7, false
기댓값 	-11
실행 결과 	테스트를 통과하였습니다.
  • 오늘 계속 풀었던 문제들을 이해하고 있다면 손쉽게 풀 수 있었음
  • 조건문을 활용한 조건에 따른 산술연산을 구현할 수 있어야 함
  • 1번 n의 배수 문제 처럼 양자택일식의 간단한 조건문은 삼항연산자를 쓰면 더 간결한 코드로 풀어 낼 수 있음을 응용해서 빠르게 풀어낼 수 있음


댓글남기기