📚
Python_Study
  • Python_Study
  • OT
    • 스터디 소개
    • 백준 설정하기
    • 질문 / 답변 / 과제 인증 방법
  • 1주차
    • 입출력과 변수, 주석
    • 제어문 1
    • 제어문 2
    • 제어문 3
    • 복습 문제
  • 2주차
    • 다양한 출력 방법
    • 문자열
    • 리스트(list)
    • 튜플(tuple)
  • 3주차
    • 다양한 함수
    • 세트(set)
    • 딕셔너리(dict)
    • 복습 문제
  • 4주차
    • 멤버 연산자
    • 아스키 코드
    • EOF
    • 복습 문제
  • 5주차
    • 진법 변환
    • 회문(팰린드롬)
    • 스택(stack)
    • 복습 문제
  • 6주차
    • 2차원 리스트
    • 정렬 심화
    • 자주 사용하는 모듈
    • 복습 문제
  • 7주차
    • 카이사르 암호
    • 순열과 조합
    • 큐(queue), 덱(deque)
    • 복습 문제
  • 8주차
    • 시계 문제
    • 얕은 복사, 깊은 복사
    • 재귀 함수 Ⅰ
    • 복습 문제
  • 9주차
    • 재귀 함수 Ⅱ
    • 그래프 알고리즘 소개
    • 플러드 필
    • 복습 문제
  • 10주차
    • 시뮬레이션Ⅰ
      • BOJ 15686 - 치킨 배달
      • BOJ 17070 - 파이프 옮기기 1
      • BOJ 21608 - 상어 초등학교
      • BOJ 11559 - Puyo Puyo
  • 11주차
    • 시뮬레이션 Ⅱ
      • BOJ 8972 - 미친 아두이노
      • BOJ 16234 - 인구 이동
      • BOJ 17135 - 캐슬 디펜스
      • BOJ 21610 - 마법사 상어와 비바라기
Powered by GitBook
On this page
  • 조건문
  • if / else
  • elif
  • 비교 연산자
  • 논리 연산자

Was this helpful?

  1. 1주차

제어문 1

선택 제어문인 조건문과 비교 연산자, 논리 연산자를 배우는 글 입니다.

조건문 - if / elif / else

비교 연산자 - == / != / < / <= / > / >=

논리 연산자 - and / or / not

조건문

조건문은 주어진 조건에 따라 코드를 돌아가게 하는 명령문입니다.

목이 마르면 물을 마시고, 아니면 안마셔야지
분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
맥주병은 유리병에 버리고, 나머지는 일반쓰레기에 버려야지

위와 같은 문장들이 조건문에 해당합니다.

if / else

조건문에서 가장 기본이 되는 함수는 if입니다. 단어 그대로 만약이라는 뜻을 가지고 있습니다. else는 if에 나온 상황이 아닌 경우에 해당하는 함수입니다.

코딩을 할 때는 if 옆에 조건을 적어서 해당 조건에 충족하면 if문 안에 들어있는 코드를 돌아가게 하고, 해당 조건에 충족하지 못하면 else문 안에 있는 코드를 돌아가게 만들어줍니다.

위에 예시를 든 문장으로 코딩을 하자면

if 목이 마르다:
    물을 마신다.
else:
    물을 마시지 않는다.

이렇게 작성 할 수 있습니다.

elif

분리수거 예시를 if - else문 코드로만 표현한다면 어떻게 될까요?

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
else:
    if item == 과자봉지:
        비닐에 버림
    else:
        if item == 맥주병:
            유리병에 버림
        else:
            일반쓰레기에 버림

이렇게 if - else문을 3개나 적어야 코드를 짤 수 있어서 손이 많이 갑니다.

그래서 필요한 것이 elif문 입니다. elif는 if와 같은 행동을 하지만 무조건 if 다음에만 올 수 있습니다.

위 코드를 elif를 사용하여 다시 짠다면 아래처럼 만들 수 있습니다.

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
elif item == 과자봉지:
    비닐에 버림
elif item == 맥주병:
    유리병에 버림
else:
    일반쓰레기에 버림

그래서 만약 10가지 상황이 나온다면 1개의 if, 8개의 elif, 1개의 else를 이용해서 표현할 수 있겠습니다.

참고로 if - else문 말고도 if - elif문이 있습니다. if - elif문은 else가 없는 대신 elif로 코드를 짜는 것입니다. 이때 else문이 없으니 모든 조건에 충족하지 못하는 경우가 있다면 해당 케이스는 제어문을 그냥 통과할 것 입니다. 아니면 elif문을 else처럼 사용할 수도 있습니다.

분리수거 예제를 수정하여 코드를 짜봅시다.

분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
그리고 맥주병은 유리병에 버려야하고 나머지 쓰레기는 가만히 내비두자

이걸 코드로 짠다면

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
elif item == 과자봉지:
    비닐에 버림
elif item == 맥주병:
    유리병에 버림

item이 페트병, 과자 봉지, 맥주병이 아닌 경우엔 그대로 코드를 통과하게 됩니다.

이제 문제를 풀어봅시다.

문제가 간단합니다. N의 값이 주어지는데 N = 0일 때 연세대학교의 영문명을 출력하고, N = 1일 때 연세대학교의 슬로건을 출력하면 되는 문제입니다.

이 문제는 N이 0일 때와 0이 아닐 때로 나누어질 수 있으므로 if - else문으로 표현할 수 있습니다.

n = int(input())
if n == 0:
    print('YONSEI')
else:
    print('Leading the Way to the Future')

if - elif 문으로 표현하면 다음과 같습니다.

n = int(input())
if n == 0:
    print('YONSEI')
elif n == 1:
    print('Leading the Way to the Future')

또 다른 문제를 풀어봅시다.

A가 B보다 크면 >를 출력하고, A가 B보다 작으면 <를 출력하고, A와 B가 같으면 ==를 출력하라고 합니다.

총 3가지 상황이 나오기 때문에 1개의 if, 1개의 elif, 1개의 else를 이용하여 코드를 짤 수 있습니다.

A, B = map(int, input().split())
if A > B:
    print('>')
elif A < B:
    print('<')
else:
    print('==')

혹은 elif 없이 if - else문으로만 만들고 싶으면 아래와 같이 코드를 짤 수도 있습니다.

A, B = map(int, input().split())
if A > B:
    print('>')
else:
    if A < B:
        print('<')
    else:
        print('==')

풀어볼 문제

비교 연산자

비교 연산자는 2개 이상의 피연산자를 비교하여 불리언 값을 반하게 만드는 연산자 입니다.

정의만 보면 무슨 소리인지 모르겠지만, 우리는 이미 수학 문제를 풀 때 사용하고 있는 방법이라 거의 다 알고 있는 내용입니다.

비교 연산자는 총 6개가 있습니다.

비교 연산자

의미

x == y

x와 y의 값이 같다.

x != y

x와 y의 값이 다르다.

x > y

x의 값이 y의 값보다 크다.

x >= y

x의 값이 y의 값보다 크거나 같다.

x < y

x의 값이 y의 값보다 작다.

x <= y

x의 값이 y의 값보다 작거나 같다.

위의 표에서 ==, !=, >, >=, <, <=이 비교 연산자이고 x와 y를 피연산자라고 합니다.

불리언 값은 True, False로 2가지가 있습니다. 해당 식이 참이면 True, 거짓이면 False를 반환하는 것입니다. 이 식들은 불리언 값을 도출해내므로 불리언 식이라고 부르고 있습니다.

print(1 > 2)
print(3 + 4 == 5 + 2)
print(1 % 2 < 1 // 2)

이렇게 피연산자 2개와 비교 연산자를 사용하여 출력을 하면 아래와 같이 출력되는 것을 확인할 수 있습니다.

False
True
False

피연산자를 3개 이상,와 비교 연산자 2개 이상를 사용하여 만들 수도 있습니다.

print(1000 > 100 > 10) # True
print(1000 > 100 < 10) # False
print(10 >= 9 >= 8 >= 7 >= 6 >= 5 >= 4 >= 3 >= 2 >= 1) #True

그리고 당연하지만 if - else문에서 if문에 있는 불리언 식이 True일 때 if문 안의 코드가 돌아가고, False인 경우에는 else문의 코드가 들어갑니다. elif도 같습니다. elif에 있는 불리언 식이 True일 때만 elif 안에 있는 코드가 돌아갑니다. 이 부분은 지금 글에 나와있는 코드들을 보면 알 수 있습니다.

#x와 y가 1일 때 YES를 출력하고, 아니면 NO를 출력하기

x, y = map(int, input().split())

if x == y == 1: #만약 x = 1, y = 1이라면 x == y == 1은 True이기 때문에 YES를 출력함
    print('YES')
else:
    pirnt('NO')

참고로 False를 숫자로 표시하면 0이고, True는 0이 아닌 모든 숫자로 표현할 수 있습니다. 하지만 컴퓨터는 0과 1만 표현할 수 있기에 True를 int형으로 출력해보면 1을 출력하는 것을 알 수 있습니다.

print(int(True))
print(int(False))

이제 본격적으로 조건문과 비교 연산자를 사용하여 문제를 풀어봅시다.

정수 A, B, C를 입력 받고, 곱셈 기호와 나눗셈 기호를 각각 한 번씩 사용하여 가장 큰 값을 출력하라고 합니다. 이때 소수점은 버리라고 나와있으므로 출력할 때 int(변수)를 사용해서 출력해야 합니다.

A B C 숫자 사이에 곱셈 기호와 나눗셈 기호를 한 번만 사용하여 만들 수 있는 공식의 수는 2개 입니다.

A * B // C

A // B * C

이것은 elif 없이 if - else문으로 만들 수 있습니다.

A, B, C = map(int, input().split())

x = A * B / C
y = A / B * C

if x >= y:
    print(int(x))
else:
    print(int(y))

또 다른 문제를 풀어봅시다.

날짜를 뜻하는 두 개의 정수를 입력 받는데 날짜가 2월 18일 전이면 Before를 출력하고, 2월 18일 이후면 After, 2월 18일이면 Special을 출력하는 문제입니다.

코드를 짜기 전에 일단 1월 일 때, 2월 18일 이전일 때, 2월 18일인 경우, 2월 18일 이후일 때, 3월 이상일 때로 총 5가지로 나눌 수 있습니다.

코드를 짤 때는 1월 일 때, 2월 일 때, 3월 이상일 때로 if - elif - else문을 짤 수 있고, 2월 일 때 18일 이전, 18일 인 경우, 18일 이후로 elif문 안에 if - elif - else문을 작성해야 합니다.

x = int(input())
y = int(input())
if x == 1:
    print('Before')
elif x == 2:
    if y < 18:
        print('Before')
    elif y == 18:
        print('Special')
    else:
        print('After')
else:
    print('After')

풀어볼 문제

논리 연산자

논리 연산자는 비교 연산자와 비슷하게 2개 이상의 불리언 식을 비교하여 불리언 값을 반하게 만드는 연산자 입니다.

논리 연산자

의

and

그리

or

또는

not

부정

and는 '그리고'라는 의미를 지니고 있으므로 A and B가 있으면 A와 B가 둘 다 True여야 True가 나오게 됩니다. 둘 중 하나라도 False가 되면 False가 나옵니다. 둘 다 False여도 False가 나옵니다.

or는 '또는'이라는 의미를 지니고 있으므로 A or B가 있으면 A와 B 둘 중 하나라도 True라면 True가 나오게 됩니다. 둘 다 False이면 False가 나옵니다.

not은 부정이라는 의미를 지니고 있으므로 not A가 있으면 A가 True일 때 False를 반환하고, A가 False일 때 True를 반환합니다.

불리언 식

결과

True and True

True

True and False

False

False and True

False

False and False

False

불리언

결

True or True

True

True or False

True

False or True

True

False or False

False

불리언

결

not True

False

not False

True

이제 조건문, 비교 연산자, 논리 연산자를 모두 활용하는 문제들을 풀어봅시다.

세 줄에 걸쳐서 삼각형의 각의 크기가 주어지는데 조건에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력하라고 합니다.

먼저 세 각의 합이 180일 때와 180이 아닐 때로 나눌 수 있고, 세 각의 합이 180일 때는 세 각이 전부 60일 때와 두 각이 같은 경우와 하나도 같지 않은 경우로 나눠서 풀 수 있습니다. 이때 두 각이 같은 경우와 하나도 같지 않은 경우에는 논리 연산자를 이용할 수 있습니다.

먼저 세 각의 합이 180일 때와 180이 아닐 때만을 if - else문으로 짠다면 아래와 같습니다.

x = int(input())
y = int(input())
z = int(input())
if x + y + z == 180:
    blah blah
else:
    print("error")

그다음 blah blah 부분에 각이 전부 같은 경우, 각이 2개만 같은 경우, 각이 서로 다른 경우를 나눠서 풀면 됩니다.

z = int(input())
if x + y + z == 180:
    if x == 60 and y == 60 and z == 60: # x == y == z == 60
        print('Equilateral')
    elif x == y or y == z or z == x:
        print('Isosceles')
    else:
        print('Scalene')
else:
    print("error")

풀어볼 문제들

Previous입출력과 변수, 주석Next제어문 2

Last updated 4 years ago

Was this helpful?

https://www.acmicpc.net/problem/15963
https://www.acmicpc.net/problem/10950
https://www.acmicpc.net/problem/20499
https://www.acmicpc.net/problem/19944
https://www.acmicpc.net/problem/10797
https://www.acmicpc.net/problem/9498
https://www.acmicpc.net/problem/14681
https://www.acmicpc.net/problem/17388
https://www.acmicpc.net/problem/2752
15680번: 연세대학교Baekjoon Online Judge
10101번: 삼각형 외우기Baekjoon Online Judge
15726번: 이칙연산Baekjoon Online Judge
10768번: 특별한 날Baekjoon Online Judge
1330번: 두 수 비교하기Baekjoon Online Judge
Logo
Logo
Logo
Logo
Logo