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 |
Tags
- 팀 프로젝트
- 데이터 엔지니어
- Kafka
- Tableau
- sql챌린지
- PCCP
- django
- 코딩테스트
- sqlsolve
- SQL
- 코테 연습
- 데이터 시각화
- cloud platform
- superset
- kubernetes
- 슈퍼셋
- k9s
- Snowflake
- Til
- beuatifulsoup
- 코딩 테스트
- 데브코스
- VPC
- airflow
- solvesql
- Selenium
- GCP
- Spark
- AWS
- HTML
Archives
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
코딩 테스트(Python) 2022 KAKAO BLIND RECRUITMENT파괴되지 않은 건물 본문
https://school.programmers.co.kr/learn/courses/30/lessons/92344
def solution(board, skill):
n = len(board) # 행(row)의 개수
m = len(board[0]) # 열(column)의 개수
acc = [[0] * (m + 1) for _ in range(n + 1)] # 누적 합 계산용 배열 (board보다 가로, 세로 1칸 더 크게 만듦)
# 스킬 정보를 누적합 배열에 기록
for type_, r1, c1, r2, c2, degree in skill:
# 스킬 유형에 따라 가중치 설정 (1: 공격 -> -degree, 2: 회복 -> +degree)
change = degree if type_ == 2 else -degree
# 누적합 배열에 스킬의 시작점과 종료점을 반영
acc[r1][c1] += change # 스킬의 시작점
acc[r1][c2 + 1] -= change # 스킬 영향 끝나는 열 바로 다음에서 효과 제거
acc[r2 + 1][c1] -= change # 스킬 영향 끝나는 행 바로 다음에서 효과 제거
acc[r2 + 1][c2 + 1] += change # 영향을 끊기 위해 대각선 맞은편에 효과 제거
# 누적합 계산 (가로 방향)
for i in range(n + 1):
for j in range(1, m + 1):
# 현재 칸에 왼쪽 칸의 값을 더해서 누적합 계산
acc[i][j] += acc[i][j - 1]
# 누적합 계산 (세로 방향)
for j in range(m + 1):
for i in range(1, n + 1):
# 현재 칸에 위쪽 칸의 값을 더해서 누적합 계산
acc[i][j] += acc[i - 1][j]
# 최종 값 계산 및 건물의 상태 확인
answer = 0
for i in range(n):
for j in range(m):
# 누적합 배열에서 계산한 값을 원본 board에 반영
board[i][j] += acc[i][j]
# 건물이 파괴되지 않은 경우 (값이 0보다 크다면) 개수 증가
if board[i][j] > 0:
answer += 1
return answer
'코딩 테스트' 카테고리의 다른 글
코딩 테스트(Python) 2021 KAKAO BLIND RECRUITMENT 합승 택시 요금 (1) | 2025.01.22 |
---|---|
코딩 테스트(Python) 2020 KAKAO BLIND RECRUITMENT 자물쇠와 열쇠 (1) | 2024.12.20 |
코딩 테스트(Python) 순위 (0) | 2024.12.20 |
코딩 테스트(Python) 풍선 터트리기 (0) | 2024.12.20 |
코딩 테스트(Python) 거스름돈 (1) | 2024.12.20 |