[Programmers/Python] Level 3: 파괴되지 않은 건물
문제: 파괴되지 않은 건물
문제: 파괴되지 않은 건물

풀이
def solution(board, skill):
answer = 0
board_update = [[0]*(len(board[0])+1) for _ in range(len(board)+1)]
for tp,r1,c1,r2,c2,degree in skill:
if tp == 1:
board_update[r1][c1] -= degree
board_update[r1][c2+1] += degree
board_update[r2+1][c1] += degree
board_update[r2+1][c2+1] -= degree
else:
board_update[r1][c1] += degree
board_update[r1][c2+1] -= degree
board_update[r2+1][c1] -= degree
board_update[r2+1][c2+1] += degree
#열방향 전파
for r in range(len(board)):
for c in range(1,len(board[0])):
board_update[r][c] += board_update[r][c-1]
#행방향 전파
for c in range(len(board[0])):
for r in range(1,len(board)):
board_update[r][c] += board_update[r-1][c]
#board 업데이트해주기
for i in range(len(board)):
for k in range(len(board[0])):
board[i][k] += board_update[i][k]
# print(board)
#board에서 0보다 큰 개수 count
for i in range(len(board)):
for k in range(len(board[0])):
if board[i][k]>0:
answer+=1
return answer
'''
board: 건물 내구도 2차원 정수배열
skill: 공격 혹은 회복 스킬 - 2차원 정수배열
[type, r1,c1,r2,c2,degree]
파괴되지 않은 건물의 개수 return
1. skill 하나씩 받아오기
2. type = 1일떄
공격 -> (r1,c1)부터 (r2,c2)까지 degree만큼 모두 빼기
type = 2일때
회복 -> (r1,c1)부터 (r2,c2)까지 degree만큼 모두 추가시켜주기
3. board에서 0보다 큰 원소 개수 return
'''
'''
for sk in skill:
if sk[0] == 1: #공격일때
for i in range(sk[1],sk[3]+1):
for k in range(sk[2],sk[4]+1):
board[i][k] -= sk[5]
else: # 회복일때
for i in range(sk[1],sk[3]+1):
for k in range(sk[2],sk[4]+1):
board[i][k] += sk[5]
for i in range(len(board)):
for k in range(len(board[0])):
if board[i][k]>0:
answer+=1
print(board)
return answer
'''
'''
1. board_update에 네개의 꼭짓점 변화량 기록
2. 나중에 board_update 가로세로 전파 한번에 해버리기
3. board_update + board 해서 건물 내구도 O(m*n)으로 구하기
4. board중 0보다 큰 개수 구해서 출력
'''
배울점
- 그대로 구현하면 \(O(k*m*n)\)이라 시간초과 → 부분합을 쓴 다음에 한번에 Board를 업데이트하면 \(O(K+M*N)\)이라 효율적
- 부분합 이용하는것까지는 생각해봤는데, 열, 행순으로 전파를 해서 한번에 업데이트 하는방법은 생각하지 못했음
Continue exploring
더 읽어보기
CTR을 예측할 수 있을리가 없잖아 무리무리!(무리가아니었다!?): nemotron persona
어떤 광고 배너가 잘될지는 결국 집행 비용을 써봐야 알 수 있었다. 배너를 많이 만들 수 있어도, 그중 무엇을 내보낼지 고르는 데는 여전히 돈이 들었다. 집행 전에 후보를 걸러낼 수 있을지 확인하려고 NVIDIA Nemotron Persona-Korea 데이터셋으...
카피 A/B 테스트와 밈으로 광고 성과를 끌어올리기
광고 배너를 자동으로 만들 수 있게 된 뒤에는 어떤 카피를 얹을지가 다음 과제였다. 성과가 높은 카피, 재밌는 카피에는 정해진 Ground Truth가 없었다. 여러 톤앤매너와 밈 RAG로 후보를 만들고 실제 광고 성과를 비교했다.
성과가 난 광고에서 다음 스토리를 찾는 위닝앵글 검색
초기 AX 제작은 좋아요 랭킹 순으로 스토리를 넓게 탐색하는 방식이었다. 이후에는 이미 성과가 난 광고에서 다음 후보를 찾는 경로를 만들었다. 다른 팀원이 만든 에이전트의 광고 성과 분석과 인사이트를 받아, 비슷한 소구점이나 이미지를 가진 새로운 스토리를 발굴하는...