—ฅ/ᐠ. ̫ .ᐟ\ฅ —

과목 일반

[컴퓨팅사고] 🎓 중간고사 오답노트

WIFI-Aircat 2024. 11. 23. 14:42
💾 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차원으로


 

반응형