본문 바로가기
AI/Coding_Test

Day4)Programmers Coding Test

by 거대웅 TitanBear 2026. 7. 8.

프로그래머스 코딩 기초 트레이닝

배수, 공배수, 홀짝, 조건문 문제 풀이 정리

이번에는 프로그래머스 코딩 기초 트레이닝에서 조건문과 나머지 연산자를 사용하는 문제들을 정리했습니다. 문제 자체는 짧지만, 직접 풀어보면 변수 이름 오타, return 방식, and&의 차이, 리스트 컴프리헨션 괄호 실수처럼 놓치기 쉬운 부분이 많았습니다.

이 글은 제가 적어둔 풀이 메모를 바탕으로, 실수한 코드와 고친 코드, 더 간단한 풀이, 그리고 왜 그렇게 동작하는지를 한 번에 볼 수 있도록 정리한 기록입니다.

핵심 1 나머지 연산자로 배수 확인
핵심 2 조건문과 한 줄 반환
핵심 3 sum, range, 조건 비교
오늘 문제들은 어려운 알고리즘보다 “조건을 정확히 코드로 옮기는 연습”에 가까웠습니다.

1. 오늘 정리한 프로그래머스 문제 링크

이번 글에서 다루는 문제는 모두 프로그래머스 코딩 기초 트레이닝에 있는 문제입니다. 배수 판별, 공배수 판별, 홀짝 조건, 문자열로 주어진 비교 연산, 불리언 값에 따른 반환을 차례대로 정리했습니다.

프로그래머스 문제 링크와 핵심 개념
문제 공식 링크 핵심 개념
n의 배수 문제 보기 나머지가 0인지 확인
공배수 문제 보기 두 배수 조건을 동시에 확인
홀짝에 따라 다른 값 반환하기 문제 보기 홀수 합, 짝수 제곱합
조건 문자열 문제 보기 문자열 조건을 비교식으로 변환
flag에 따라 다른 값 반환하기 문제 보기 참이면 더하기, 거짓이면 빼기

 

2. n의 배수: 오타가 숨어 있어도 방심하면 안 된다

첫 번째 문제는 numn의 배수이면 1, 아니면 0을 반환하는 문제입니다. 배수 판별은 나머지 연산자 %를 사용하면 됩니다.

처음 작성한 코드는 아래와 같았습니다.

def solution(num, n):
    answer = 0
    if num % n == 0:
        answer = 1
    else:
        ansewer = 0
    return answer

 

기본 풀이를 깔끔하게 정리하면 다음과 같습니다.

def solution(num, n):
    if num % n == 0:
        return 1
    return 0

더 간단하게 쓰면 조건식의 참/거짓을 정수로 바꿀 수 있습니다.

def solution(num, n):
    return int(num % n == 0)

num % nnumn으로 나눈 나머지입니다. 나머지가 0이면 정확히 나누어떨어진다는 뜻이므로 배수입니다. 그리고 True는 정수로 바꾸면 1, False는 0이 됩니다.

3. 공배수: 두 조건은 and로 묶기

두 번째 문제는 numbern의 배수이면서 동시에 m의 배수인지 확인하는 문제입니다. 두 조건이 모두 참이어야 하므로 and를 사용합니다.

가장 이해하기 쉬운 기본 풀이는 다음과 같습니다.

def solution(number, n, m):
    if number % n == 0 and number % m == 0:
        return 1
    return 0

조건 표현식으로 쓰면 한 줄에 가깝게 정리할 수 있습니다.

def solution(number, n, m):
    return 1 if number % n == 0 and number % m == 0 else 0

또는 참/거짓을 바로 정수로 바꾸면 더 짧습니다.

def solution(number, n, m):
    return int(number % n == 0 and number % m == 0)

여기서 &를 써도 경우에 따라 동작할 수는 있지만, 논리 조건을 읽기 좋게 표현할 때는 and가 더 적절합니다. &는 기본적으로 비트 연산자이므로 초반에는 조건문에서 and를 쓰는 습관을 들이는 편이 안전합니다.

4. 홀짝에 따라 다른 값 반환하기: range와 sum으로 정리하기

세 번째 문제는 n이 홀수이면 n 이하의 홀수 합을 구하고, 짝수이면 n 이하의 짝수 제곱합을 구하는 문제입니다.

def solution(n):
    if n % 2 == 1:
        return sum(range(1, n + 1, 2))
    else:
        return sum(i ** 2 for i in range(2, n + 1, 2))

range(1, n + 1, 2)는 1부터 n까지 2씩 증가하므로 홀수만 꺼냅니다. 반대로 range(2, n + 1, 2)는 2부터 시작하므로 짝수만 꺼냅니다. 짝수일 때는 각 숫자를 제곱해야 하므로 i ** 2를 사용했습니다.

주의할 점은 괄호입니다. 아래처럼 마지막에 대괄호가 하나 더 붙으면 문법 오류가 납니다.

return sum(i ** 2 for i in range(2, n + 1, 2)])

리스트로 만들어도 되지만, 여기서는 sum(i ** 2 for i in ...)처럼 바로 합계를 구하는 방식이 더 간단합니다.

5. 조건 문자열: 긴 if문을 안전하게 줄이기

네 번째 문제는 ineqeq라는 문자열 조합에 따라 nm을 비교하는 문제입니다. 처음에는 모든 경우를 나누어 작성할 수 있습니다.

def solution(ineq, eq, n, m):
    if ineq == ">" and eq == "!":
        return int(n > m)
    elif ineq == ">" and eq == "=":
        return int(n >= m)
    elif ineq == "<" and eq == "!":
        return int(n < m)
    else:
        return int(n <= m)

이렇게 쓰면 각 조건이 눈에 잘 보입니다. 다만 처음 작성한 것처럼 매번 answer = 1, answer = 0을 반복해서 넣기보다는, 비교 결과를 int()로 바꾸면 코드가 짧아집니다.

조금 더 줄이고 싶다면 문자열 조합을 키로 쓰는 방법도 있습니다.

def solution(ineq, eq, n, m):
    conditions = {
        ">!": n > m,
        ">=": n >= m,
        "<!": n < m,
        "<=": n <= m,
    }
    return int(conditions[ineq + eq])

여기서 ineq + eq">=", "<!"처럼 하나의 문자열 키가 됩니다. 그리고 그 키에 맞는 비교 결과를 꺼내 정수로 바꿉니다. 짧게 만들려고 eval()을 쓰는 풀이도 볼 수 있지만, 문자열을 코드처럼 실행하는 방식이라 학습용 글에서는 추천하지 않습니다.

6. flag에 따라 다른 값 반환하기: 조건 표현식 연습

마지막 문제는 flag가 참이면 a + b, 거짓이면 a - b를 반환하는 문제입니다. 조건이 단순하기 때문에 한 줄 조건 표현식으로 정리하기 좋습니다.

def solution(a, b, flag):
    return a + b if flag else a - b

이 표현은 “flag가 참이면 a + b를 반환하고, 아니면 a - b를 반환한다”는 뜻입니다. 조건이 짧고 결과가 두 갈래로 명확할 때 사용하면 읽기 좋습니다.

7. 입출력 예로 빠르게 검산하기

코드를 제출하기 전에는 공식 예시를 손으로 한 번 따라가 보는 것이 좋습니다. 특히 오늘 문제들은 한 줄 풀이가 가능해서 오히려 조건을 거꾸로 쓰거나 괄호를 잘못 닫아도 눈치채기 어려울 수 있습니다.

문제별 빠른 검산 예시
문제 확인할 예시 검산 포인트
n의 배수 98 % 2 == 0 나머지가 0이면 1
공배수 60 % 2 == 0, 60 % 3 == 0 두 조건이 모두 참이어야 1
홀짝 n = 7, 1 + 3 + 5 + 7 홀수이면 홀수 합
조건 문자열 ineq = "<", eq = "=" n <= m으로 바뀌는지 확인
flag flag = True, flag = False 참이면 더하기, 거짓이면 빼기

이렇게 예시를 하나씩 대입해보면, 코드가 짧아졌을 때도 조건을 잘못 줄였는지 확인할 수 있습니다. 특히 and 조건과 range()의 시작값, 끝값, 증가값은 제출 전에 한 번 더 보는 편이 안전합니다.

8. 실수 방지 체크리스트

  • 배수 문제는 % 결과가 0인지 먼저 확인한다.
  • 두 조건이 모두 필요할 때는 and를 먼저 떠올린다.
  • 참/거짓을 1과 0으로 바꿀 때는 int(조건식)을 사용할 수 있다.
  • sum() 안에 제너레이터를 넣을 때 괄호 짝을 꼼꼼히 확인한다.
  • 문자열 조건을 코드처럼 실행하는 방식은 피하고, 명시적인 조건문이나 매핑을 사용한다.

9. 같이 보면 좋은 것

이번 글에서 헷갈린 부분은 나머지 연산자, 조건문, 반복 범위, 참/거짓 처리와 연결됩니다. 아래 주제들을 함께 보면 다음 문제를 풀 때 훨씬 안정적으로 접근할 수 있습니다.

  • 코딩의 덧셈·나눗셈·몫·나머지 완전 기초: %//처럼 기본 연산자가 헷갈릴 때 같이 보기 좋습니다.
  • 조건문 if, elif, else 기초 정리: 여러 조건을 순서대로 나눠야 할 때 필요한 내용입니다.
  • range와 sum으로 반복 계산하기: 홀수 합, 짝수 합, 제곱합처럼 범위를 만들어 계산하는 문제에 도움이 됩니다.
  • 참과 거짓을 1과 0으로 바꾸는 방법: int(True), int(False)를 이해하면 짧은 풀이를 읽기 쉬워집니다.

마무리

오늘 정리한 문제들은 짧은 코드로 풀 수 있지만, 그 안에 중요한 기본기가 많이 들어 있었습니다. 특히 나머지 연산자, 조건문, 한 줄 반환, sum()range()는 앞으로도 계속 나올 내용입니다.

다음에 비슷한 문제를 만나면 먼저 “조건이 하나인지 여러 개인지”, “참/거짓을 그대로 쓸 수 있는지”, “반복 범위가 홀수인지 짝수인지”를 확인하려고 합니다. 이렇게 문제를 읽는 순서를 정해두면 코드가 훨씬 덜 흔들릴 것 같습니다.