-
[백준 Node.js] 1157번 단어공부To infinity/Coding Practice 2021. 6. 26. 17:53
2021.06.26
Question
Answer code
let input = `Mississipi`.toString(); //모두 대문자로 바꾼다. let uppercase = input.toUpperCase().split(''); //메서드는 원본을 바꾸지 않는다. //reduce는 배열에 적용되는 메서드다. 따라서 uppercase를 배열로 만들어야 한다. //split메서드는 string메서드를 객체로 바꿔주는 메서드다. let obj = uppercase.reduce((acc,cur) => { if(!acc[cur]) acc[cur] = 1 //acc라는 객체의 키가 없다면 키를 만들어 1을 할당하고 acc[cur] ++ //키가 있다면 해당 값에 1을 더해준다. return acc //그리고 acc객체를 반환해준다. },{}) console.log(obj) //{ M: 2, I: 6, S: 5, P: 2 } for (let i in obj){ console.log(obj); console.log(obj[i]); console.log(i); } //ojc의 값이 가장 큰 프로퍼티를 출력한다. let result = ''; let n = 0; for (let i in obj) { if(obj[i] > n) { n = obj[i] result = i } else if(obj[i] == n) result = '?'; } console.log(result);
How to solve?
VS CODE에서 실행했을 땐 입력값 모두 잘 나온다.
그리고 백준에서 답을 제출했을 때에도 마치 정답일것마냥 로딩을 100%까지 하고나선 틀렸다고 말하는거 보니 뭔가 안맞는 부분이 있나본데 그게 뭔지 모르겠네.
여기서 핵심은 객체의 프로퍼티 키와 프로퍼티 값에 접근하는 방법이다.
reduce함수로 구한 객체에서, 프로퍼티 키가 클 경우 그 값을 내도록 해야하는데 어떻게 해야할지 몰랐는데 for..in문을 이용하면 프로퍼티 키와 값에 손쉽게 접근할 수 있음을 알게됐다.
그래서 해당 함수를 이용했다.
근데 아직 이해가 안되는게 있는데 for .. in 문에서 obj[i]는 프로퍼티 값을 가져오는데 obj는 프로퍼티 키를 가져온다.아.. obj[i]는 프로퍼티 키를 가져온다.아, for..in문에서 i는 프로퍼티 키를 가져오고 obj[i]는 해당 프로퍼티키의 값을 가져온다.
역시 디버깅모드 짱
근데 대체 뭐가 틀린건질 모르겠네..ㅠㅠ
Reference
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js/Javascript] 2941번 크로아티아 알파벳 (0) 2021.06.27 [백준 Node.js/Javascript] 5622번 다이얼 (0) 2021.06.27 [백준 Node.js] 2908번 상수 (0) 2021.06.26 [백준 Node.js] 10809번 알파벳 찾기 (Feat. 아스키코드) (0) 2021.06.26 [백준 Node.js] 11720번 숫자의 합 (0) 2021.06.26