2주차 2번(제로)

Hyo Kyun Lee·2021년 4월 22일
0
post-thumbnail

1.문제 링크

https://www.acmicpc.net/problem/2751

2. 풀이 전 계획과 생각

  • 어떤 방법이 시간/공간 복잡도를 최소화할 수 있을까
  • 다른 사람들이 안한, 나만의 방법은 무엇이 있을까
  • 입력을 받고 배열을 만든후, 배열내 반복을 하여 구하는 방법말고 다른 방법을 찾아본다.

2-1. 풀이방안

  • 숫자를 입력받은후, 배열을 만들고 그 배열안에서 반복문을 구현한다.
    ▶정방향 반복 : 인덱스 0부터 배열내 반복, 0을 만나면 숫자 제거
    ▶역방향 반복 : 역방향에서 0을 만난 숫자만큼 숫자 제거

  • 숫자제거
    ▶ 숫자를 제거할 필요가 있나? -> 0으로 만든다.

  • 숫자를 입력받은후에 바로바로 숫자제거 등을 반영한다.
    ▶ 입력받은 숫자가 0일때 이전 인덱스에 대해 반복하여 0으로 만들어준다.

3. 풀이


#조건입력
Size_Array = int(input('Size? '))
print(Size_Array)

i = 0
j = 0
k = 0

InputArray = []

#반복문 작성
while i < Size_Array:
    number = int(input('number? '))
    if number == 0:
        # 0을 입력했을때 바로바로 숫자제거
        for j in range(len(InputArray)-1):
            if InputArray[i-j-1] != 0:
                InputArray[i-j-1] = 0
                break #숫자제거가 완료되면 반복문 탈출
            else :
                InputArray[i - j - 1] = InputArray[i-j-1]
    i = i + 1
    InputArray.append(number)

#반복문결과 확인
print(InputArray)

#최종결과 도출
result = sum(InputArray)
print(result)

4. 풀이하면서 고민했던 점

  • 이것이 다른 사람들이 생각하지 않은, 나만의 방법이 될 수 있을까?
  • 숫자을 입력받고 바로바로 문제조건을 반영한다는 것이 시간/공간복잡도를 최소화할 수 있는 것일까?
  • 단순히 파이썬 기능을 사용하는 것이 아닌, 기초적인 파이썬 문법을 가지고도 충분히 로직을 구현할 수 있지 않을까?
  • 코드의 가독성을 높이고, 재활용성, 직관성을 높이기 위해 변수이름부터 어떻게 할지 고민을 하고, 알고리즘의 분기점을 어디에 위치시킬 것인지 잘 확인해본다.

5. 문제를 풀고 알게된 개념 및 소감

  • while : 조건을 만족하는 동안 반복
  • for : 해당 범위내에서 처음부터 끝까지 반복
  • if : 조건문, 조건문 범위내 로직은 반드시 들여쓰기
  • sum(list) : list 정수의 합

0개의 댓글