https://school.programmers.co.kr/learn/courses/30/lessons/12905코드function solution(board) { let answer = 0; const r = board.length; const c = board[0].length; const acc = Array.from(new Array(r + 1), () => new Array(c + 1).fill(0)); for (let i = 1; i 누적합을 사용하면 효율적으로 풀 수 있는 문제다. 아래 그림을 보면 어떻게 누적합으로 푼다는건지 좀 더 쉽게 이해할 수 있다.그림에서 빨간 칸이 현재 위치라고 할 때, 현재 위치에서 가능한 최대 정사각형의 크기는 왼쪽, 위쪽, 그리고 대각선 왼쪽 위의 ..
https://softeer.ai/practice/6294코드import sysinput = sys.stdin.readlinen, k = map(int, input().split())s = list(map(int, input().split()))# 누적합acc = [0]for i in range(n): acc.append(acc[-1]+s[i])for _ in range(k): a, b = map(int, input().split()) avg = (acc[b]-acc[a-1])/(b-a+1) print(f"{round(avg, 2):.2f}") 소수의 형식을 정해서 출력하는 방식이 조금 헷갈렸던 문제였다. `round()`를 사용해서 소수 2번째 자리까지 나오도록 하면 될 줄 알았는..
https://www.acmicpc.net/problem/16507코드import sysinput = sys.stdin.readliner, c, q = map(int, input().split())picture = [list(map(int, input().split())) for _ in range(r)]# 누적합 구하기acc = [[0]*(c+1) for _ in range(r+1)]for i in range(r): for j in range(c): acc[i+1][j+1] = acc[i][j+1] + acc[i+1][j] - acc[i][j] + picture[i][j]for _ in range(q): r1, c1, r2, c2 = map(int, input().split())..
https://school.programmers.co.kr/learn/courses/30/lessons/132265코드def solution(topping): answer = 0 acc = [0]*(len(topping)) acc_reverse = [0]*(len(topping)) s = set() s_reverse = set() for i in range(len(topping)): s.add(topping[i]) acc[i] = len(s) s_reverse.add(topping[len(topping)-1-i]) acc_reverse[len(topping)-1-i] = len(s_reverse) # 공평하게 나누는 ..
https://www.acmicpc.net/problem/10751코드let fs = require("fs");let filePath = process.platform === "linux" ? "dev/stdin" : "./input.txt";let [n, word] = fs.readFileSync(filePath).toString().trim().split("\n");function solution(n, word) { let cow = Array.from(new Array(n), () => new Array(3).fill(0)); if (word[0] === "C") { cow[0][0] = 1; } for (let i = 1; i 코드 설명우선 입력된 단어를 word라는 변수에 저장했다..