💾 Computational thinking & SW coding
🆀 문제 1.
`+`, `-`, `*`와 숫자로 이루어진 문자열에 대해 계산하는 프로그램을 작성하시오
ex. "1 * 2 + 3 + 4 - 2" -> 7
🆂 풀이
틀린 풀이
s = list("1 * 2 + 3 + 4 - 2".split())
gap = int(s[0])
for i in range(1, len(s), 2):
ins = s[i]
num = int(s[i+1])
if ins == '+':
gap += num
elif ins == '-':
gap -= num
elif ins == '*':
gap *= num
print(gap)
답
s = "1 * 2 + 3 + 4 - 2"
print(eval(s))
틀린 이유
사칙연산의 우선순위를 고려하지 않았다. 만약에 입력값이 "1 + 2 * 3 + 4" 정도로만 바뀌어도 올바른 답이 나오지 않는다.
🆀 문제 2.
두 개의 날짜가 문자열 형태로 주어질 때 어느 것이 더 이전의 날짜인지 출력하는 프로그램을 작성하시오
ex. "2023년 4월 7일" "2019년 11월 23일" -> "2019년 11월 23일"
🆂 풀이
틀린 풀이
d1, d2 = "2023년 4월 7일", "2019년 11월 23일"
one = d1
two = d2
one = one.replace('년', '')
one = one.replace('월', '')
one = one.replace('일', '')
two = two.replace('년', '')
two = two.replace('월', '')
two = two.replace('일', '')
one = one.split()
two = two.split()
b = d1
if one[0] > two[0]:
b = d2
elif one[0] == two[0]:
if one[1] > two[1]:
b = d2
elif one[1] == two[1]:
if one[2] > two[2]:
b = d2
print(b)
답
d1, d2 = "2023년 4월 7일", "2019년 11월 23일"
one = d1.split()
two = d2.split()
for i in range(len(one)):
one[i] = int(one[i][:-1])
two[i] = int(two[i][:-1])
if one > two:
print(d2)
else:
print(d1)
틀린 이유
string 상태에서 비교했기 때문에 `'11'` < `'4'` 가 되어 오답
int로 바꿔서 비교해야 `11` > `4`로 제대로 된 답이 나온다
🅿 더 알아보기
- `eval( )` : 문자열로 표현된 표현식(expression)을 받아 결과값을 내준다.
- `''.join( )` : 리스트 ➡️ 문자열
- `from string import ascii_lowercase` : 영어 알파벳 소문자 리스트
- `s = sum(s, [])` : 2차원 리스트를 1차원으로
반응형
'과목 일반' 카테고리의 다른 글
| [자료구조] 0909 Review - 포인터, 배열, 문자열, 구조체 (4) | 2024.12.09 |
|---|---|
| [프로그래밍 기초] 🎓 기말고사 오답노트 (3) | 2024.12.02 |
| [프로그래밍 기초] 🎓 중간고사 오답노트 (4) | 2024.11.30 |
| [자료구조] 열혈 자료구조⛑️ #1 (1) | 2024.11.28 |
| [컴퓨터구조] 📐 Mean in Performance Metric (2) | 2024.11.28 |