Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 티스토리챌린지
- 깊이 우선 탐색
- join
- Dynamic Programming
- Lv. 1
- 소프티어
- 자바스크립트
- dfs
- javascript
- Python
- Java
- SQL
- programmers
- SQL 고득점 KIT
- 파이썬
- Lv. 2
- bfs
- 너비 우선 탐색
- softeer
- group by
- 오블완
- LEVEL 2
- Lv. 0
- Lv. 3
- select
- DP
- C언어
- level 3
- 동적계획법
- 프로그래머스
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 3] 파괴되지 않은 건물 {언어 : Python} [다시 풀어 보기] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/92344?language=python3
정답 코드
def solution(board, skill):
answer = 0
n = len(board)
m = len(board[0])
# 계산을 용이하게 하기 위한 범위 설정
dp = [[0] * (m+1) for _ in range(n+1)]
for tp, r1, c1, r2, c2, degree in skill:
# attack
if tp == 1:
degree *= -1
r2 += 1
c2 += 1
# 좌상부터 이어져서 우하에는 0이 되어야 하므로 + - - +
# 좌상, 우상, 좌하, 우하
dp[r1][c1] += degree
dp[r1][c2] -= degree
dp[r2][c1] -= degree
dp[r2][c2] += degree
# 행 누적
for i in range(n):
for j in range(1, m):
dp[i][j] += dp[i][j-1]
# 열 누적
for p in range(1, n):
for q in range(m):
dp[p][q] += dp[p-1][q]
# 전체 탐색
for r in range(n):
for c in range(m):
if board[r][c] + dp[r][c] >= 1:
answer += 1
return answer
풀이 방법
- 누적합을 예로 든 것이다.
- 행 누적을 하고 열 누적을 하든 열 누적을 하고 행 누적을 하든 똑같다.
느낀점
- 이런 방식은 떠올리기 힘들고 모르면 최대한 빨리 답을 봐서 눈에 익히는 것이 좋다.
'알고리즘 > 다시 풀어 보기' 카테고리의 다른 글
프로그래머스 [Lv. 3] 길 찾기 게임 {언어 : JavaScript} [다시 풀어 보기] (0) | 2024.07.22 |
---|---|
프로그래머스 [Lv. 3] 인사고과 {언어 : Python} [다시 풀어 보기] (0) | 2024.07.22 |
프로그래머스 [Lv. 3] 합승 택시 요금 {언어 : Java} [다시 풀어 보기] (3) | 2024.07.15 |
프로그래머스 [Lv. 3] 자물쇠와 열쇠 {언어 : JavaScript} [다시 풀어 보기] (0) | 2024.07.10 |
프로그래머스 [Lv. 2] N-Queen {언어 : Java} [다시 풀어 보기] (0) | 2024.07.05 |