백준

백준 1157 nodejs 객체를 잘 써보자, reduce 활용, Object

mynamemj 2025. 4. 28. 21:28
const fs = require('fs')

const filePath = process.platform === "linux" ? "dev/stdin" : "input.txt";

const input = fs.readFileSync(filePath).toString().trim().toUpperCase()



// my code

const inputList = [...input]

const unDupliInput = Array(...new Set([...input]))



const valueObjectList = unDupliInput.map((value) => {

const len = inputList.filter(val => val === value).length

return {value, len}

})



const maxObject = valueObjectList.reduce((acc, cur) => {

if (acc.len < cur.len) {

return cur

} else {

return acc

}

})



const lastConfirm = valueObjectList.filter((val) => val.len == maxObject.len)



console.log(lastConfirm.length > 1 ? "?" : maxObject.value)



// gpt

const result = [...input].reduce((acc, char) => {

acc.counts[char] = (acc.counts[char] || 0) + 1;

if (acc.counts[char] > acc.maxCount) {

acc.maxCount = acc.counts[char];

acc.maxChar = char;

acc.isTie = false;

} else if (acc.counts[char] === acc.maxCount && acc.maxChar !== char) {

acc.isTie = true;

}



return acc;

}, { counts: {}, maxCount: 0, maxChar: '', isTie: false });



console.log(result.isTie ? '?' : result.maxChar);



// retry1



const counts = {}

for (const char of input) {

counts[char] = (counts[char] || 0) + 1

}

const maxCount = Math.max(...Object.values(counts))

const temp2 = Object.keys(counts).filter(key => counts[key] == maxCount)

const maxCountObject = Object.entries(counts).filter(obj => maxCount == obj[1])

const temp = maxCountObject.length > 1 ? "?" : maxCountObject[0][0]

console.log(temp2.length > 1 ? "?" : temp2[0])



// retry2

const counts = [...input].reduce((acc, char) => {

acc[char] = (acc[char] || 0) + 1

return acc

}, {})

console.log(counts)

object를 제대로 써야 길을 돌아가지 않는다. 처음 짠 코드는 억지로 겨우겨우 만들어냈다. 머리속으로 생각하는 코드를 지원해주는 메서드가 있을 것 같다고 생각하지만, 쓸 줄 모르니 일단 구현을 했다. 성공을 해서 다행이지만 저렇게 평생 할 순 없으니 지피티한테 더 좋은 코드를 물어봤다. Object사용과 reduce사용 그리고 filter로 두 번 작업하지 말고 애초에 대문자를 집어 넣어서 편하게 쓰는 것 까지 알려주더라.
항상 똑똑하지는 않아도 누군가 써준 똑똑한 코드를 잘 가져와준다. 어딘가에 있는 블로그 답변이겠지만 아주 똑똑해보여서 지피티가 알려준 코드를 읽어본 뒤 다시 손으로 쳐봤다. 처음에는 금단 온 것 처럼 손떨리면서 알트탭 누를 뻔 했다. 다행히 retry1에서 억지구현 다시 해내고 이제 손에 좀 익었다.

Object의 메서드를 아는 것 보다 나에게는 reduce의 활용법 하나 더 늘어난게 지식+1 이다. 1. reduce에 초기 값을 정할 수 있는 것을 이용해 빈객체를 할당하는 것 2. key값과 value를 어떻게 설정하는지. 이 두 개를 얻었다. 원래는 { key: 키, value: 값 } 이렇게 썼는데...

객체[키] = 값 잘 기억해두자.

'백준' 카테고리의 다른 글

2941 백준 크로아티아 문자 nodejs  (0) 2025.04.29
백준 알고리즘 맞는데 왜 틀려?  (0) 2025.03.04
2480_주사위 세개  (1) 2025.01.20