2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석
2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 2: 변수, 자료형, 연산자 – Python 기본 문법 ①
프로그램의 의사결정 – 조건문의 역할
“만약 ~라면 ...한다”라는 논리는 우리가 일상에서 수없이 사용합니다. 프로그램도 마찬가지로, **조건문(if문)**을 통해 상황에 따라 다른 동작을 하도록 흐름을 제어합니다. 초보 프로그래머가 반드시 익혀야 할 개념인 조건문은, PCCE 시험에서 별도의 문항으로 출제될 뿐만 아니라, 다른 문제를 풀 때도 기본적으로 활용되는 핵심 도구입니다. 예를 들어, 분기문제(주어진 조건에 따라 결과 출력)나 범위 판단 문제 등이 조건문을 사용해 해결됩니다. 본 파트에서는 Python의 if문 사용법과 다양한 사례를 살펴보고, PCCE에서 조건문이 어떻게 출제되는지 분석해보겠습니다.
Python의 조건문 기초
1. if문의 기본 구조: Python에서 조건문은 if <조건>: 형태로 사용합니다. 조건을 평가하여 True면 콜론(:) 다음 들여쓴 코드 블록이 실행됩니다. 예를 들어:
# 코드 예시 |
if x > 0: print("x는 양수입니다.") |
x > 0이 True일 때 "x는 양수입니다."를 출력합니다. 반대로 조건이 False면 이 블록을 건너뛰고 다음 코드로 넘어갑니다.
2. if-else 문: 어떤 조건이 True일 때와 False일 때 서로 다른 동작을 하게 하려면 else 블록을 사용합니다. 구조는 다음과 같습니다:
# 코드 예시 |
if 조건: # 조건이 참일 때 실행 else: # 조건이 거짓일 때 실행 |
예를 들어, 짝수인지 홀수인지 판단하는 코드는 이렇게 작성할 수 있습니다:
# 코드 예시 |
if num % 2 == 0: print("짝수입니다.") else: print("홀수입니다.") |
num % 2 == 0이 참이면 짝수 출력, 아니면 홀수 출력이 이뤄집니다.
3. if-elif-else: 판단해야 할 조건이 여러 개일 경우 elif (else if의 줄임말) 블록을 추가합니다. 예를 들어, 점수에 따라 학점을 부여하는 코드를 생각해봅시다:
# 코드 예시 |
if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" else: grade = "D" |
위 코드는 위에서부터 순차적으로 조건을 검사하며, 첫 번째로 True가 되는 조건의 블록을 실행하고 전체 if-elif-else 구조를 빠져나옵니다. score가 85라면 첫 if는 False, 두 번째 elif는 True여서 grade "B"를 설정하고 끝납니다. 주의할 점은, 여러 조건 중 하나가 만족되면 나머지 elif들은 검사조차 하지 않는다는 것입니다. 또한 순서를 바꾸면 로직이 깨질 수 있습니다. (예를 들어 score >= 80 블록을 위로 올리면 90점도 B로 처리되는 오류가 발생하겠죠.) 그러므로 조건의 우선순위를 논리적으로 배열하는 것이 중요합니다.
4. 중첩 if문: if문 안에 또 if문을 넣어 복잡한 조건을 다룰 수도 있습니다. 예를 들어, 나이를 입력받아 성인/미성년, 그리고 성별에 따라 다른 메시지를 출력한다고 할 때:
# 코드 예시 |
if age >= 20: if gender == "남": print("성인 남성입니다.") else: print("성인 여성입니다.") else: print("미성년자입니다.") |
위와 같이 작성할 수 있습니다. 다만 중첩이 너무 깊어지면 코드가 복잡해지므로, 가능한 한 elif 등을 사용해 평면적으로 표현하는 게 바람직합니다. PCCE 범위 내에서는 2중 if 정도까지는 충분히 다룰 수 있습니다.
5. 조건문 속의 반복문 / 반복문 속의 조건문: 조건문과 반복문은 서로 조합되어 사용되기도 합니다. 예를 들어 리스트의 요소들 중 특정 조건을 만족하는 것만 출력하려면 반복문 안에 if를 넣으면 됩니다:
# 코드 예시 |
for x in numbers: if x % 2 == 0: print(x, "은 짝수") |
반대로, 특정 조건이 True일 때 반복을 끝내거나 다음 반복으로 넘기는 데는 반복문 안에서 if와 break/continue를 사용합니다:
# 코드 예시 |
while True: data = input("값 입력(종료:q): ") if data == 'q': break # q 입력 시 루프 종료 if len(data) == 0: continue # 빈 문자열이면 아래 코드는 건너뛰고 다음 반복 print("입력한 값:", data) |
이렇듯 조건문과 반복문은 현실 문제 해결을 위해 함께 동작하므로, 이후 파트에서도 자연스럽게 이 조합을 보게 될 것입니다. PCCE에서도 어떤 문제는 반복 속에 조건이, 어떤 것은 조건 속에 반복이 있는 형태로 출제됩니다.
6. 조건식의 다양한 표현: Python에서는 불필요한 == True 비교 없이도 값을 조건으로 사용할 수 있습니다. 예를 들어 if is_raining:은 is_raining 변수가 True일 때 실행됩니다. 또한 숫자나 컬렉션도 조건문에서 사용할 수 있는데, 0이나 빈 문자열/리스트는 False로 간주되고, 그 외 값은 True로 간주됩니다. 이걸 Truthiness/Falsiness라고 합니다. 하지만 초보 단계에서는 명시적으로 비교해주는 것이 이해하기 쉬우므로, PCCE 대비 코드를 짤 때는 if len(arr) > 0:처럼 조건을 명확히 표현하는 것을 권장합니다.
실습 예제 코드: 조건문 활용 (나이 계산 예제)
이번 예제에서는 한국식 나이와 만 나이 계산을 조건문으로 구현해보겠습니다. 이 예제는 실제 PCCE 기출 3번 문제 *“나이 계산”*과 유사한 유형으로, 조건문 사용을 연습하기에 적합합니다.
문제 가정: 어떤 사람의 출생 연도와 "Korea" 또는 "Year" 중 하나의 문자열을 입력받습니다. "Korea"가 주어지면 2030년 기준 한국나이를 계산해 출력하고, "Year"가 주어지면 2030년 기준 **만 나이(국제나이)**를 출력하세요. (한국 나이는 태어나자마자 1살이고 해가 바뀔 때마다 +1, 만 나이는 태어날 때 0살이고 생일이 지나야 +1 하는 방식이죠.)
# 코드 예시 |
# 입력 예시: # birth_year = 2000 # age_type = "Korea" (혹은 "Year") birth_year = 2000 age_type = "Korea" age_2030 = 0 # 결과를 담을 변수 초기화 if age_type == "Korea": age_2030 = 2030 - birth_year + 1 # 한국식 나이: 현재년도 - 출생년도 + 1 elif age_type == "Year": age_2030 = 2030 - birth_year # 만 나이: 현재년도 - 출생년도 (생일 지났는지 여부는 무시) else: age_2030 = -1 # 혹시 지정된 값 이외의 입력이 들어오면 -1 (에러 처리) print("2030년 기준 나이:", age_2030) |
위 코드에서, birth_year와 age_type은 가상의 입력으로 2000과 "Korea"를 넣었습니다. 이 경우 2030년 한국식 나이는 2030-2000+1 = 31살이 되어 2030년 기준 나이: 31이라고 출력합니다. 만약 age_type = "Year"였다면 결과는 30이 되겠죠.
코드 해설: 먼저 age_type의 값에 따라 세 가지 경우로 분기했습니다. "Korea"일 때와 "Year"일 때, 그리고 그 외 (혹시 잘못된 입력이 들어올 경우)로 나누었습니다. 각 경우에 age_2030 계산식을 다르게 적용하고 있습니다. 실제 PCCE 기출에서는 입력을 직접 받고 출력하도록 요구했겠지만, 여기서는 개념 설명을 위해 값을 하드코딩했습니다. 이 코드의 핵심은 조건 비교에 **문자열 비교 (==)**를 사용했다는 점과, 상황에 맞게 산식을 선택했다는 점입니다.
조건문 작성 시 고려할 점 몇 가지:
- if 조건은 순서가 중요합니다. 위 예제에서는 Korea와 Year 두 경우뿐이라 순서가 상관없지만, 만약 조건이 범위 비교였다면 큰 값 조건을 먼저 쓰는 등 순서 설계에 신경 써야 합니다.
- elif는 앞선 조건이 거짓일 때만 검사되므로, 한 조건이 참이어서 블록이 실행되면 전체 if-elif-else가 종료됩니다. 따라서 여러 조건이 겹쳐 True인 상황이 있어도, 처음 만난 True만 처리하고 끝난다는 것을 기억하세요. (이것이 if-elif-else와 개별 if문의 차이입니다. 개별 if문은 각각 독립적으로 실행될 수 있습니다.)
- 문자열 비교에서는 대소문자 정확히 맞춰야 합니다. "korea"와 "Korea"는 다르게 취급되니, 입력값이 정확히 일치하는지 확인해야 합니다. 필요하다면 age_type.lower() 등의 함수를 써서 소문자로 통일한 뒤 비교하는 것도 방법입니다.
- else 블록은 위에서 걸러진 모든 조건 이외의 경우에 실행되므로, 로직상 여기까지 오지 않을 것으로 확신되면 사용하지 않을 수도 있습니다. 하지만 시험 대비 단계에서는 가능한 한 else를 붙여 완벽한 조건 분기를 작성하는 습관을 권합니다. 이게 오답 노트를 작성할 때도 도움이 됩니다 (어느 조건에서 예상치 못한 값이 들어왔는지 파악하기 쉽죠).
PCCE 출제 포인트 분석: 조건문 분야
PCCE에서 조건문은 단독으로도, 다른 주제와 얽혀서도 출제됩니다. 주요 포인트를 살펴보면:
- 단순 분기 출력 문제: 입력된 값에 따라 서로 다른 메시지나 값을 출력하는 문제가 자주 출제됩니다. 예를 들어 "점수에 따른 합격/불합격 출력", "짝수 홀수 판별", "문자 비교해서 일치 여부 출력" 등이 있을 수 있죠. 이런 문제는 if-else 구조만 제대로 쓰면 어렵지 않지만, 출력 형식을 정확히 맞추는 게 중요합니다. 공백, 줄바꿈까지 요구사항에 맞게 해야 정답 처리되니 꼼꼼히 검토하세요.
- 다중 조건 처리: 한 가지 예로, 앞서 언급한 “학점 부여” 문제를 생각해봅시다. PCCE에 비슷한 문제가 나온다면 90이상 A, 80이상 B, ... 60미만 F 같은 걸 묻겠죠. 이런 문제에서 실수하기 쉬운 부분은 조건의 순서와 경계값 처리입니다. 90 이상을 먼저 검사하지 않으면 95점도 B가 되는 실수를 할 수 있고, 경계(예: 90점, 80점 등)가 올바르게 한쪽에 포함되어야 합니다. PCCE는 이런 부분을 의도적으로 함정으로 넣을 수 있으므로, 조건을 작성한 뒤 간단한 경계값으로 머릿속 시뮬레이션을 해보세요. 89, 90, 90, 79, 80 등을 대입해보며 의도대로 분기되는지 확인하는 것입니다.
- 논리 연산 활용: 두 개 이상의 조건이 동시에 필요한 경우 and나 or을 써야 합니다. 예를 들어 "어떤 수가 10~50 사이에 있고 짝수이면 출력" 같은 조건은 if 10 <= num <= 50 and num % 2 == 0:으로 표현할 수 있습니다. 초보자는 종종 이를 잘못 표현해서 버그를 만드는데, 파이썬에서는 연속된 비교도 가능함을 기억하세요 (10 <= num <= 50은 C나 Java에서는 (num>=10 && num<=50)로 써야 하지만, 파이썬에선 수학 기호처럼 쓸 수 있습니다). 논리 연산자를 썼을 때도 복잡한 경우 괄호를 사용하는 것이 좋습니다. PCCE에서는 논리표현을 간결하게 쓰기보다는 명확하게 쓰는 것을 더 중시할 수 있습니다. 따라서 if (condition1) and (condition2):처럼 각각 괄호로 구분하면 가독성과 정확성을 높일 수 있습니다.
- 중첩 조건문의 경우: 중첩 if는 복잡도를 높이므로 문제를 풀 때 가급적 피하는 게 좋습니다만, 가끔 부득이하게 사용하게 될 때가 있습니다. 시험에서는 중첩 if 자체를 직접 묻기보다는, 디버깅 상황에서 들여쓰기 오류나 블록 누락을 찾아내게 할 수도 있습니다. 예를 들어 아래와 같은 버그 코드를 생각해봅시다:이 코드는 의도대로라면 flag가 True이고 val도 양수일 때 "OK", 아니면 "NO"를 출력하려 한 걸 수 있는데, 실제로는 else가 내부 if가 아닌 바깥 if에 연결되어 있어서 flag가 True일 때 val에 상관없이 else가 실행되지 않는 문제가 있습니다. 이러한 들여쓰기 실수를 파악하는 것도 조건문 단원에서 중요합니다. (Python은 블록을 들여쓰기로 구분하므로, 중첩 구조에서 else가 어디 속하는지 주의해야 합니다.)
-
# 코드 예시 if flag:
if val > 0:
print("OK")
else:
print("NO") - 문자열 조건 비교 실수: PCCE 기출 3번처럼 문자열 값을 조건 분기로 주는 문제에서 흔한 실수는, "Korea"와 "korea"를 혼동하거나, 대소문자나 철자를 틀리는 것입니다. 시험 볼 때는 주어진 입력값이 정확히 어떤 문자열인지 문제에서 제시한 그대로 사용해야 합니다. 또한 =와 ==를 헷갈리는 초보자도 있는데, 조건에서는 반드시 ==를 사용해야 함을 잊지 마세요 (사실 파이썬에서는 = 쓰면 문법 에러가 나므로 눈치채겠지만, 다른 언어 C 계열 하시던 분들은 습관적으로 실수할 수 있으니 유의).
요약하면, 조건문 파트에서는 주어진 로직을 정확히 코드로 옮기는 능력이 중점 평가됩니다. 조건을 빠뜨리거나 잘못 지정하면 곧장 오답으로 이어지기 때문에, 모든 경우를 망라하도록 생각해야 합니다.
마무리 요약 및 꿀팁
조건문은 프로그램의 두뇌에 해당합니다. 다양한 상황에서 다르게 행동하는 유연함을 부여하지요. 이번 파트에서는 if문의 기본 사용법부터 elif, 중첩, 논리 연산까지 살펴봤습니다. PCCE Level 3를 준비하는 독자라면, 이제 간단한 일상 문제를 스스로 if문을 사용해 해결해보세요. 예를 들어 “세 숫자 중 최대값 찾기”, “윤년 판별하기”, “숫자 맞히기 게임 로직” 등을 떠올려보고 코드를 짜 보는 겁니다. 이런 연습을 통해 자연스럽게 조건문에 익숙해질 수 있습니다.
꿀팁:
- 의사코드로 설계: 조건문이 여러 개 섞인 복잡한 문제를 만나면, 바로 코드로 작성하지 말고 먼저 모든 경우를 나열해보세요. 종이에 “만약 A이고 B이면 C, 아니면 D...” 식으로 써보는 겁니다. 이걸 기반으로 코드 구조를 잡으면 논리 빠짐이 없게 됩니다.
- 경계값 테스트: 조건 분기는 대부분 크거나 작음의 경계에서 실수가 납니다. 그러니 작성한 코드에 0, 음수, 최대값, 경계값 등을 대입해 머릿속으로 결과를 생각해보세요. 시험 중이라도 간단한 숫자를 대입해보는 건 가능합니다(시간만 허락한다면!).
- 불필요한 조건 배제: if hungry == True: 보다는 if hungry:가 낫고, if bool_var == False:보다는 if not bool_var:가 더 파이써닉합니다. 물론 초보때는 좀 장황해도 되지만, 익숙해지면 불필요한 비교는 제거하는 습관을 들이세요. 그래야 실수도 줄고, 코드는 간결해집니다. (다만, 코드 골격을 짤 땐 이해를 위해 일부러 풀어서 쓰고, 나중에 다듬는 것도 괜찮습니다.)
추천 연습 문제
- [PCCE 기출문제] 3번: 나이 계산 – 앞서 실습한 한국나이/만나이 문제입니다. 조건 분기 사용에 적합한 문제이니 스스로 다시 한 번 풀어보세요 (input으로 값을 받아서).
- 프로그래머스 Lv0: 각도기 – 각도를 입력받아 예각, 직각, 둔각, 평각을 구분하여 1/2/3/4를 출력하는 문제입니다. 다중 조건과 elif 사용 연습에 좋습니다. (예: 70도 → 예각이므로 1)
- 프로그래머스 Lv0: 두 수 비교하기 – 두 정수를 비교하여 크면 '>', 작으면 '<', 같으면 '=='를 출력하는 문제입니다. 단순하지만 if-elif-else 구조 이해에 도움이 됩니다.
- 프로그래머스 Lv0: 점의 위치 구하기 – (x, y) 좌표가 주어졌을 때 어느 사분면에 속하는지 1,2,3,4로 반환하는 문제입니다. 중첩 if 없이 복수 조건을 판단하는 연습을 할 수 있습니다.
2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석
2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 2: 변수, 자료형, 연산자 – Python 기본 문법 ①
'프로그래밍' 카테고리의 다른 글
[PCCE] LV3 파이썬 완전정복: Part 6 함수 정의와 활용, 표준 라이브러리 (math, random) (0) | 2025.05.25 |
---|---|
[PCCE] LV3 파이썬 완전정복: Part 5 리스트와 2차원 리스트 – 자료구조 입문 (0) | 2025.05.24 |
[PCCE] LV3 파이썬 완전정복: Part 4 반복문 – while, for, 중첩 반복 (0) | 2025.05.24 |
[PCCE] LV3 파이썬 완전정복: Part 2: 변수, 자료형, 연산자 – Python 기본 문법 ① (0) | 2025.05.22 |
[PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석 (0) | 2025.05.22 |