백준/ Silver 2 문제 , 백준 파이썬 1912, 연속합
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
예외 경우가 있어서 두번 틀리고 수정해서 맞췄다. 내가 처음에 체크하지 못했던 부분은 음수밖에 없는 경우랑 마지막 값을 빼먹고 합을 센 경우 두가지였다. 예시를 몇개 더 만들어서 돌려보면서 체크했음.
<문제 출처>
https://www.acmicpc.net/problem/1912
------------------------------------------------------------------------------------------------------------------------------
추가 예시
* 모두 음수일때 그중 제일 큰값을 출력하는 경우랑
* 마지막값이 양수일때 더해야할지 말지 체크해가며 합에 포함하여 출력
------------------------------------------------------------------------------------------------------------------------------
내가 생각한 아이디어는 check 변수를 통해 양수와 음수 연속적으로 나오는 구간을 나누어 구간합을 구해준 뒤 또 한번의 for 문을 통해서 구간합을 한번더 구해준뒤 제일 큰값을 출력하는 방법이다.
이때, 입력받은 숫자들이 음수로만 이루어져 있다면 구간합을 구할 필요없이 음수들중에서 가장 큰 값만 출력 시켜준다.
1)
check=True 로 선언해준다. 이 변수는 양수와 음수가 연속되는지를 체크해주는 역할을 한다.
편의상 True는 양수, False는 음수 라 생각하면 된다.
리스트의 첫값을 우선 확인해 양수이면 tmp 값에 더해주기만 하고
음수이면 tmp에 더해준뒤 check를 통해 음수값을 받았다고 표시해준다. 이후 store 리스트에 값을 우선 넣어준다.
2)
이후 for 문을 돌려 값을 확인한다. 이때 첫번째 인덱스는 앞에서 확인했으므로 1번 인덱스부터 체크.
이 코드에서 if 문은 이전값까지는 양수였고 현재값은 음수일때. 즉, 양수의 연속이 끊기고 음수가 등장하는 시점.
elif 문은 이전값까지는 음수였고 현재값은 양수일때. 즉 음수의 연속이 끊기고 양수가 등장하는 시점이다.
이 시점마다 store에 저장. 이후 tmp를 0으로 초기화 시켜줘서 구간을 끊어주고 check를 통해 양수나 음수를 만났다고 표시.
추가로 모든 인덱스를 돌때 마다 tmp 변수에 계속해서 더해준다.
마지막 if 문은 num 리스트의 마지막 값 (마지막으로 입력받은 숫자) 가 양수이면 store에 추가, 음수이면 무시한다.
여기까지 작성하고 store를 출력해서 확인해보면 양수 음수가 연속되는 구간합이 잘 구해진다.
마지막 -1 은 음수이므로 값을 더할 필요가 없으니 무시.
3)
이후, 음수만 받았을 경우는 if 문을 통해 걸러주고 이외에는 else문으로 받는다.
m이라는 리스트에 이제 값들을 저장해 줄 것이고 for 문에 들어가기전 우선 첫번째 구간합만 넣어준다.
1번인덱스 부터 체크해주면서 store 리스트를 확인하는데, 이때 음수를 더했을때 그 값이 0보다 작아지게 된다면 이 음수를 기준으로 오른쪽 값들만 확인해주면 된다.
무슨 말이냐면
위의 예시 구간 합을 보면 10 -4 15 를 더한 값 21 이 아직까지는 제일 큰값 하지만 -35를 만나면 -14가 되므로 이 값은 더이상 가지고 다닐 필요가없어진다.
그러므로 sum=0 으로 다시 초기화 해줘서 다음 값들을 새로 확인해주는 방식.
33을 만나게되면 sum은 33이 되고, 이 값이 이제 제일 큰값이 되게 된다.
------------------------------------------------------------------------------------------------------------------------------
정답
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Silver 3 문제 , 백준 파이썬 10973 , 이전 순열 (0) | 2022.03.05 |
---|---|
백준/ Silver 3 문제 , 백준 파이썬 10972 , 다음 순열 (0) | 2022.03.04 |
백준/ Silver 3 문제 , 백준 파이썬 1874, 스택 수열 (0) | 2022.03.02 |
백준/ Gold 5 문제 , 백준 파이썬 2225 , 합분해 (0) | 2022.02.28 |
백준/ Silver 2 문제 , 백준 파이썬 4948, 베르트랑 공준 (0) | 2022.02.26 |