[백준 알고리즘] 2단계 : 조건문 (1번~7번)

chxxrin·2022년 5월 20일
0

백준 알고리즘

목록 보기
2/2

1단계 (문제번호 : 1330) 두 수 비교하기

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

a, b = map(int, input().split())
if a > b :
    print(">")
elif a < b :
    print("<")
else : 
    print("==")
  • map() : 한 줄로 문자열을 입력받아서 string을 int형의 숫자로 변환해주는 함수. 콤마(,)를 사용해 함수를 작성해줄 수 있다. 반드시 int를 써주는 것을 잊지 말자....

2단계 (문제번호 : 9498) 시험 성적

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

score = int(input())
if score >= 90 : 
    print("A")
elif score >= 80 :
    print("B")
elif score >= 70 :
    print("C")
elif score >= 60 :
    print("D")
else : 
    print("F")
  • 숫자를 하나만 입력받기 때문에 map()을 쓰지 않고, int(input()) 만 써줌
  • input() : 문자열을 입력받는 함수. 단, input()으로 입력받은 값은 문자열이기 때문에 숫자로 변환하려면 int()함수를 써줘야함
  • int() : 문자열을 정수형의 숫자로 바꿔주는 함수
  • 굳이 조건문을 길게 쓸 필요 없고, score >= 90 이거만으로도 해결됨!! 굳이 굳이 논리연산자 안써도된다. 최대한 간결하게 쓰자.

3단계 (문제번호 : 2735) 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

year = int(input())
if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0) :
    print("1")
else : 
    print("0")
  • year도 입력을 받고, int형의 정수가 되어야 하므로 int(input())을 사용했다.
  • if~else 조건문을 사용했는데, 이 때 중요한 것은 논리연산자!!
  • 여러개의 논리연산자가 필요할 때는 소괄호를 써서 구분해주자
  • python에서는 논리연산자가 and, or 이다!!
  • 배수를 표현할 때는 그 숫자 == 0 을 사용하면 된다.

4단계 (문제번호 : 14681) 사분면 고르기

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.
예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.
점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

x = int(input())
y = int(input())
if x>0 and y>0 :
    print("1")
elif x<0 and y>0 :
    print("2")
elif x<0 and y<0 :
    print("3")
else : 
    print("4")
  • x와 y를 입력받는데, 한 줄에 하나씩 입력받아야 하므로 각각 int(input())함수를 사용해주었다.
  • 논리연산자 and를 이용해 2가지의 조건을 한 번에 작성해주었다.

5단계 (문제번호 : 2884) 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.
바로 "45분 일찍 알람 설정하기"이다.
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

Hour, Min = map(int, input().split())
if Min < 45 :
    if Hour == 0 :
        Hour = 23
        Min += 60
    else : 
        Hour -= 1
        Min += 60
print(Hour, Min-45)
  • 우선 hour과 min을 숫자로 입력받기 위해 map(int, input().split())함수를 사용했다.
  • 처음엔 쉽다고 생각했는데,, 이게 기준을 45분으로 잡아야 하는 거였다. 우선 45분보다크면 굳이 hour을 고칠 필요가 없는데, 만약 45분보다 작으면 hour도 건드려 줘야 한다. 45분보다 작을 때, 만약에 0시면 23시로 바꿔야하고, 그게 아니면 그냥 hour-1만 해주면 된다. 그리고 그 min에 60을 더해주면 된다.
  • 생각보다 생각해야 할 점이 많아서 조금 헷갈렸다 ㅠㅠ

6단계 (문제 번호 : 2525) 오븐 시계

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

hour, min = map(int, input().split())
timer = int(input())
hour += timer // 60
min += timer % 60
if min >= 60 :
    hour += 1
    min -= 60
if hour >= 24 :
    hour -= 24
print(hour, min)
  • 개인적으로 시계 문제는 내가 취약한 것 같다... 나 수학 좋아하는데... 싫어하나봐
  • 우선 hour과 min은 한 줄에 한 칸씩 띄어서 출력이 되어야 하므로 map(int, input().split())함수로 입력을 받아주고, 그 다음줄에 timer은 따로 int(input())함수로 받아주었다.
  • 우선, timer 값을 어떻게 사용해주어야 하느냐!!!가 중요하다.
  • timer는 hour에 대해서는 60의 몫을 사용하고, min에 대해서는 나머지를 사용한다.
  • 왜냐하면 만약에 timer을 20분을 하면 60으로 나눠주면 0이므로 시간은 0시간이 추가되고, 20을 60으로 나눈 나머지는 20분이기 때문에 그냥 20분만 추가되는 것이다. 하지만, timer가 80분이면, 80을 60으로 나눈 몫은 1이고, 나머지는 20이다. 그러므로 1시간 20분이 계산이 되는 것이다. 그래서 timer을 사용해서 미리 hour과 min의 변수에 바뀐 값을 넣어준다!!! 이 때는 값이 넘쳐도 된다. 우리는 아래 if 조건문에서 값을 시간의 값으로 변형해 줄 것이기 때문에!
  • 이를 이용해서 if 조건문을 사용할 것이다. 조건문은 min과 hour에 대해 각각 따로 사용한다.
  • min 조건문에서는 만약 min이 60보다 클 경우만 따져준다!! 60보다 작으면 상관이 없으니까. 만약 60보다 크면 hour의 값을 하나 증가해주고, min에서는 60을 빼준다. 만약 min에 들어있는 값이 위에서 더해가지고 80이 됐다면 hour에 1을 추가해주고, min이 80-60=20이 된다.
  • hour 조건문에서는 만약 hour이 24보다 클 경우만 따져준다. 이것도 24보다 작으면 시계의 시간이 맞기 때문에 고쳐줄 필요가 없다. 만약 24보다 크면 min을 조정할 필요는 없고, hour-24를 해서 다시 hour변수에 넣어주면 올바른 hour의 값이 나온다!
  • 결국 출력은 위에서 쫘라르르르 계산을 해주었기 때문에 hour과 min만 출력해주면 된다.
  • 시계문제...........생각할게 많아서 싫다...

7단계 (문제 번호 : 2480) 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

a, b, c = map(int, input().split())
if a == b == c:
    print(10000 + (a * 1000))
elif a == b or b == c:
    print(1000 + (b * 100))
elif a == c:
    print(1000 + (a * 100))
else:
    print(max(a, b, c) * 100)
  • 세 수를 동시에 숫자로 입력을 받으므로 map(int, input().split())함수를 사용해 입력값을 받아주고 문자열을 숫자로 바꾸어 주었다.
  • 조건문은 총 4개를 사용했다. 1. a,b,c가 모두 같을 경우, 2. a와 b 혹은 b와 c가 같을 경우 3. a와 c가 같을 경우 그리고 4. 그 이외의 경우.
  • 2개가 같은 경우를 구하는게 조금 헷갈렸다. b를 기준으로 생각했을 때, a와 b, b와 c가 같다면 그 기준인 b를 곱하는 값으로 사용했고 나머지 a와 c가 같을 경우만 따로 구했다.
  • max() : max()함수는 파이썬 내장함수로 주어진 수들 중에서 최댓값을 구해주는 함수이다. 그래서 다른 if문 써서 하지 않고 바로 max()함수를 이용해서 구했다. 참... 편하다!!

0개의 댓글