알파벳 A to Z 까지의 열 26개가 있고 지정한 길이만큼 rows 가 있는 스프레드시트가 주어진다. 각 셀의 기본값은 0 이며 값을 지정하거나, 값을 0으로 초기화하거나, 숫자 또는 셀좌표가 들어있는 계산식을 받아서 값을 구해야 한다.
무엇을 의도한 것인지는 모르겠으나 배열(스프레드시트)을 만들 필요는 전혀 없고 해시맵 하나만 만들면 되는 문제. 혹시나 메모리 조건을 까다롭게 해서 주나 봤는데 제한도 10^4 라서 널널하다. 생성자에 들어오는 rows 값도 사실 필요가 없는 문제. 이틀 연속으로 최소힙 최대힙 문제가 나오길래 살짝 긴장했는데 쉬운 문제가 나왔다.
계산식에 숫자가 문자열로 들어가는 부분만 주의하고 nullish coalescing 을 써서 가볍게 해결.
class Spreadsheet {
private LABELS: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
private dict: Map<string, number>
private rows: number
constructor(rows: number) {
this.rows = rows
this.dict = new Map()
}
setCell(cell: string, value: number): void {
this.dict.set(cell, value)
}
resetCell(cell: string): void {
this.dict.delete(cell)
}
getValue(formula: string): number {
return formula
.slice(1)
.split('+')
.reduce((acc: number, cur: string): number => {
let curNum = 0
if (this.LABELS.includes(cur[0])) {
curNum = this.dict.get(cur) ?? 0
} else {
curNum = Number(cur)
}
return acc + curNum
}, 0)
}
}
