일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ChatGPT
- AI 경진대회
- gs25
- 우분투
- 코로나19
- 프로그래머스 파이썬
- 맥북
- github
- Baekjoon
- leetcode
- Real or Not? NLP with Disaster Tweets
- 편스토랑
- 편스토랑 우승상품
- 프로그래머스
- Docker
- 캐치카페
- 더현대서울 맛집
- SW Expert Academy
- 파이썬
- dacon
- PYTHON
- programmers
- 금융문자분석경진대회
- 데이콘
- 자연어처리
- Git
- ubuntu
- Kaggle
- 백준
- hackerrank
- Today
- Total
솜씨좋은장씨
[BaekJoon] 5656번 : 비교 연산자 (Python) 본문
코딩 1일 1문제 470일차! 오늘의 문제는 백준 5656번 비교 연산자입니다.
백준의 비교 연산자 문제를 파이썬으로 풀이하였습니다.
👨🏻💻 문제 풀이
백준 비교 연산자 문제는 숫자와 연산자 그리고 숫자가 공백으로 이어진 문자열을 받으면
문자열을 보고 가운데에 있는 연산자에 따라 이 문자열이 나타내는 의미가 맞는지 틀리는지를 판단하고
맞으면 true, 틀리면 false를 출력하는 문제입니다. ( true, false 부분에서 삽질을 조금 했습니다 )
입력되는 문자열의 형태는 다음과 같습니다.
3 != 3
4 < 4
4 <= 5
3 E 3
공백으로 숫자와 연산자가 이어져있는 형태입니다.
연산에 필요한 숫자와 어떤 연산자인지 파악할때 활용할 가운데의 문자열로 나누기 위해 split을 활용하여
공백을 기준으로 문자열을 나누어줍니다.
exp_split = exp.split()
exp가 "3 != 3" 의 경우 exp_split에는 [ '3', '!=', '3' ] 의 결과가 들어가게 됩니다.
num1, operator, num2 = int(exp_split[0]), exp_split[1], int(exp_split[2])
여기서 맨 앞과 맨 뒤의 값은 정수형으로 변환하여 각각 num1과 num2로 가운데의 문자열은 그대로 operator에 넣어
숫자와 연산자를 구분해줍니다.
answer = False
if operator == "E":
answer = -1
elif operator == "!=":
answer = (num1 != num2)
elif operator == "<":
answer = (num1 < num2)
elif operator == ">":
answer = (num1 > num2)
elif operator == "<=":
answer = (num1 <= num2)
elif operator == ">=":
answer = (num1 >= num2)
elif operator == "==":
answer = (num1 == num2)
그 후 가운데 문자열의 연산자로 연산한 결과를 answer에 넣을 수 있도록 if 조건문을 활용하여 가운데 문자열을 확인하고
각각 가운데 문자열과 같은 모양의 진짜 비교 연산자와 num1, num2를 활용하여 구한 값을 answer에 넣도록 합니다.
이때 가운데 문자열의 값이 E 일 경우는 반복문을 종료해야하는데
이를 파악하기 위해 이때는 answer 에 -1을 넣어주도록 합니다.
def compare_operator(exp):
answer = False
exp_split = exp.split()
num1, operator, num2 = int(exp_split[0]), exp_split[1], int(exp_split[2])
if operator == "E":
answer = -1
elif operator == "!=":
answer = (num1 != num2)
elif operator == "<":
answer = (num1 < num2)
elif operator == ">":
answer = (num1 > num2)
elif operator == "<=":
answer = (num1 <= num2)
elif operator == ">=":
answer = (num1 >= num2)
elif operator == "==":
answer = (num1 == num2)
return answer
이를 모아서 위처럼 하나의 함수로 만들어줍니다.
이제 이 함수를 통해 결과를 받아와 원하는 출력 모양대로 만들어주는 부분을 구현해보겠습니다.
if __name__ == "__main__":
case_num = 1
while True:
exp = input()
result = compare_operator(exp)
if result == -1:
break
else:
print(f"Case {case_num}: {str(result).lower()}")
case_num += 1
먼저 문제에서 몇 개를 입력받는지는 알려주지 않고 숫자 사이에 E 가들어간 경우
즉, 연산자로 E가 들어올 경우에 더이상 입력을 받지 않는다고 했습니다.
이에 for 반복문을 활용하지 않고 while 반복문을 활용합니다.
while 반복문을 활용하여 문자열을 한번에 한줄씩 입력 받고 이 입력받은 문자열을 위에서 만들어둔
compare_opeartor 함수에 넣어 결과를 받아와 result에 넣어줍니다.
여기서 나온 값이 -1일 경우 while 반복문 break로 종료
그렇지 않을 경우에는 결과를 출력할때 입력 받은 순서대로 1부터 번호를 붙여 출력합니다.
저는 f-string을 활용하여 결과를 만들었습니다.
여기서 주의할 점은 문제에서 최종 출력 모양이
Case 1: false
Case 2: false
Case 3: true
위와 같이 true와 false의 맨 앞 글자가 소문자인 것을 주의해야합니다.
저는 평소처럼 그냥 True, False로 나오는 result를 그대로 f-string에 넣고 제출을 눌렀다가 계속 틀렸습니다 결과가 나와
이상했었는데
Boolean 값을 그대로 출력했을때 각 값의 맨 앞글자가 대문자로 표기되어 틀리는 것이었습니다.
이에 result값을 string 형식으로 변경 후 이를 lower() 를 활용해 소문자로 만들고나서 출력하면 정답으로 인정되었습니다.
print(f"Case {case_num}: {str(result).lower()}")
여기까지하면 끝입니다.
전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
def compare_operator(exp):
answer = False
exp_split = exp.split()
num1, operator, num2 = int(exp_split[0]), exp_split[1], int(exp_split[2])
if operator == "E":
answer = -1
elif operator == "!=":
answer = (num1 != num2)
elif operator == "<":
answer = (num1 < num2)
elif operator == ">":
answer = (num1 > num2)
elif operator == "<=":
answer = (num1 <= num2)
elif operator == ">=":
answer = (num1 >= num2)
elif operator == "==":
answer = (num1 == num2)
return answer
if __name__ == "__main__":
case_num = 1
while True:
exp = input()
result = compare_operator(exp)
if result == -1:
break
else:
print(f"Case {case_num}: {str(result).lower()}")
case_num += 1
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[SW Expert Academy] 12368번 : 24시간 (Python) (0) | 2021.09.03 |
---|---|
[BaekJoon] 10984번 : 내 학점을 구해줘 (Python) (0) | 2021.09.02 |
[BaekJoon] 11816번 : 8진수, 10진수, 16진수 (Python) (0) | 2021.08.31 |
[BaekJoon] 5355번 : 화성 수학 (Python) (0) | 2021.08.30 |
[BaekJoon] 14490번 : 백대열 (Python) (0) | 2021.08.29 |