GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스자바스크립트
  • 영어독해
  • 자바스크립트
  • 백준풀이
  • 영어
  • javascript
  • 백준
  • 코드업
  • 백준파이썬
  • PYTHON
  • 코딩
  • 코테
  • 코딩테스트
  • 코드업파이썬
  • 독해
  • 프로그래머스풀이
  • 파이썬
  • 프로그래밍언어
  • 프론트엔드
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Silver1 문제 , 백준 파이썬 11660 , 구간 합
알고리즘 공부/백준 - 파이썬

백준/ Silver1 문제 , 백준 파이썬 11660 , 구간 합

2021. 12. 15. 23:37

백준/ Silver1 문제 , 백준 파이썬 11660 , 구간 합

 

 

Check Point !   ( 해당사항 ✓체크 )

1. 막힘 없이 수월하게 풀린 문제인가?

2. 1시간이내로 풀렸던 문제인가?

3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

4. 시간을 써도 도무지 풀 수 없는 문제인가?

5. 솔루션을 찾아봤는가?

-------------------------------------------------------------------------------------------

난이도 체감
1. 최상
2. 상
3. 중
4. 하


<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함


<덧붙일 말>
그냥 처음에 중첩 for 문을 사용하여 더하니 시간초과가 났다.
이렇게 구간합을 구해놓고 필요한부분만 더하고 빼주면 속도가 빨라진다.
python3 에서는 여전히 시간 초과가 나는 코드지만, pypy3 는 통과했다.

 

 

 

 

 

<문제 출처>

 

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

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net

 

------------------------------------------------------------------------------------------------------------------------------

 

 

처음 작성한 코드이다. 이렇게 작성하면 시간초과가 난다.

 

 

 

https://claude-u.tistory.com/427

 

#374 백준 파이썬 [11660] 구간 합 구하기 5

https://www.acmicpc.net/problem/11660 SOLUTION 할 때마다 for 문을 행렬로 두 번 돌려 sum을 구하는 방식은 시간 초과가 난다. O(n^2)이기 때문. 1행 1열부터 x행 y열까지의 sum을 한 번에 구해놓고 sum_matri..

claude-u.tistory.com

 

이 블로그에서 솔루션을 얻었다.

 

바로 구간 합을 이용하는 것인데,

 

 

문제에서 주는 예시1 로 설명해 보겠다.

 

 

 

예시1

예시1 에서 주어진 행렬이다. 

 

구하려는 부분은 (2,2) ~ (3,4) 에 해당하는 부분으로 2행 3부터 3행 6까지의 합이다.

 

이 예시는 쉽게 계산이 되지만, 원리를 알아보자.

 

 

 

 

 

이렇게 바꿔 주었는데 1열은 똑같고, 2열부터는 값을 차근차근 더해나간 값들이다.

 

2열 3 5 7 9 는 원래 2열이였던 2 3 4 5 에다가 1열 1 2 3 4를 더해준 것이다.

 

2+1=3

3+2=5

4+3=7

5+4=9 

 

를 해준 값이다.

 

그러면 자연스레 3열은 원래 3열  3 4 5 6에다가 위에서 새로 만든 2열 3 5 7 9 를 더한 값이겠다.

 

 

3+3=6

5+4=9

7+5=12

9+6=15

 

이 값이 새로운 3열을 차지 하게된다.

 

이런식으로 끝열까지 쭉 더해서 새 행렬을 만들어주면 된다.

 

 

 

 

그 후 구하려는 구간을 보면 이 네모칸 안에 있는 구간들이다.

 

하지만, 여기서 중점으로 봐야할 곳은 맨 오른쪽 구간이다. 

 

이 오른쪽에 써져있는 값들이 그 행에서 열까지 다 더한 값이고

 

구하려는 행의 값 들을 다 더한 값은 저 14에 해당하는 부분에서 구간에 속하지 않는 2를 빼주면된다.

 

즉, 14-2=12 가 구하려는 범위 내의 2행의 구간 값이다.

 

3행은 그럼 당연히 18-3=15 가 구하려는 범위내의 3행의 구간 값일 것이다.

 

 

이 예시는 2행과 3행까지만 필요하므로, 각 행에서 나온 값들을 더한 12+15=27 이 값이 최종 답이다.

 

 

이런 원리를 적용하여 문제를 풀어나가면 된다.

 

 

 

 

 

------------------------------------------------------------------------------------------------------------------------------

 

정답

 

 

 

 

 

 

 

 

 

 

 

반응형

'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글

백준/ class3 문제 , 백준 파이썬 11399 , ATM  (0) 2021.12.16
백준/ Silver5 문제 , 백준 파이썬 1343 , 폴리오미노  (0) 2021.12.16
백준/ Silver1 문제 , 백준 파이썬 16953 , A → B  (0) 2021.12.15
백준/ Silver1 문제 , 백준 파이썬 1927 , 최소 힙  (0) 2021.12.15
백준/ Silver5 문제 , 백준 파이썬 5800 , 성적 통계  (0) 2021.12.15
    '알고리즘 공부/백준 - 파이썬' 카테고리의 다른 글
    • 백준/ class3 문제 , 백준 파이썬 11399 , ATM
    • 백준/ Silver5 문제 , 백준 파이썬 1343 , 폴리오미노
    • 백준/ Silver1 문제 , 백준 파이썬 16953 , A → B
    • 백준/ Silver1 문제 , 백준 파이썬 1927 , 최소 힙
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바