Python/online judge

백준 [10773.제로] | Python

구름솜:D 2024. 1. 29. 23:42
728x90

✏️ 문제

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