✏️ 문제
https://www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
✏️ 풀이방법
1. 입력된 수를 num 리스트에 담는다.
2. num에서 숫자 하나씩 받을 result리스트 생성
3. num의 값이 0이면 append하지 않고 그 전 값을 pop 한다.
4. result 리스트 안에 있는 원소의 총 합을 출력한다.
📌 코드
n = int(input())
num = [] #입력한 정수를 받는 리스트
for _ in range(n):
num.append(int(input()))
result = [] #num리스트에서 숫자를 확인해서 받을 리스트
for i in num:
#num의 원소가 0이면 가장 최근의 원소를 지움
if i == 0:
result.pop(i-1)
else:
result.append(i)
print(sum(result))
📌 결과
#입력
4
3
0
4
0
#출력
0
#입력
10
1
3
5
4
0
0
7
0
0
6
#출력
7
🤔 시행착오.1
n = int(input())
num = []
for _ in range(n):
num.append(input())
cnt = len(num)
i = 0
while True:
if i == cnt:
break
if num[i] == 0:
num.remove(num[i-1])
print(num)
i += 1
print(num)
['1', '3', '5', '4', '0', '0', '7', '0', '0', '6']
- input()은 입력된 데이터를 문자열로 받는데 while문 안의 조건문에서 숫자 0이랑 비교연산을 수행해서 remove가 있는 연산이 수행되지 않는다.
🤔 시행착오.2
n = int(input())
num = []
for _ in range(n):
num.append(int(input()))
i = 0
while True:
if 0 not in num:
break
if num[i] == 0:
num.remove(num[i])
num.remove(num[i-1])
print(num)
i +=1
print(num)
IndexError: list index out of range
- 시행착오 1에서 input()은 입력된 데이터를 문자열로 받으니 int()로 형변환을 해서 입력받아서 조건문을 실행 할 수 있었지만, remove를 하게 되면 num의 리스트 안의 원소 개수가 바뀌면서 index에러가 발생한다. 리스트를 하나가 아닌 두 개를 사용하는 것이 좋을 것 같다.
🔎 다른풀이
k = int(input())
lst = []
for _ in range(k):
n = int(input())
# 입력이 0인 경우 가장 최근에 쓴 수를 지우고
# 0이 아닐 경우 해당 수를 쓴다
lst.append(n) if n else lst.pop()
print(sum(lst))
- https://develop247.tistory.com/366
- 두 개의 리스트를 사용하지 않고도 하나의 리스트에 데이터를 input하는 과정에서 조건문을 사용할 수 있다.
📝 메모
- 너무 익숙하게 메소드나 함수를 사용하다 보니 데이터타입을 고려하지 않은채 막 풀이하고 있는 것 같다. 데이터 타입이랑 흐름을 생각하면서 천천히 풀이하고 시간은 나중에 잡아야할 것 같다.
📒 다시보기
백준[10828.스택] | Python
✏️ 문제 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거
somin0416.tistory.com
'Python > online judge' 카테고리의 다른 글
백준 [1152.단어의 개수] | Python (0) | 2024.01.31 |
---|---|
백준 [1789.수들의 합] | Python (0) | 2024.01.29 |
Softeer [level2.금고털이] | Python (0) | 2024.01.29 |
백준 [1193.분수찾기] | Python (0) | 2024.01.29 |
백준 [1934.최소공배수] | Python (0) | 2024.01.29 |