객체 코플릿 문제풀이
최근 우분투 설치를 마쳤으나,, 한글이 적히지 않아 문제를 해결한다고 며칠이 걸렸다,, 현재는 이상 무 !
객체에 대해 배우는데 어려움이 좀 있었다. 특히 문제를 추상적으로 풀어야 할 때 어려움을 느꼈다.
복습 차원에서 다시 되내어 본다.
Q. 문자열을 입력 받는데, 입력받은 문자열을 키로 갖는 객체를 리턴해야 한다.
각 키의 값은 해당 문자가 문자열에 등장하는 횟수를 의미하는 number 타입이여야 한다.
주의 : 빈 문자열을 받으면 빈 객체를 리턴해야 한다.
ex. let output = countAll('banana')
console.log(output) // {b: 1, a: 2, n: 2}
의사코드
입력받은 문자열을 순회 하면서 값을 비교하고, 값이 같으면 +1을 해주면 되겠다.
리턴은 객체로 해줘야 하니, 해당 배열을 빈 객체에 담아줘야 할 것이다.
for 문으로 str[i] 를 순환하면서 객체에 값이 있으면 객체로 넣어줘야겠다.
** 내가 생각하지 못했던 부분 => 그럼 숫자값을 어떻게 카운트 해주지? 였는데 설명을 들으니
어느 타이밍에 추가를 해줘야 하는지 알았다.
for 문이 끝나기 직전, 조건문이 끝나고 카운트를 올려줘야 했다.
function countAll(str) {
let obj = {} // 값을 리턴할 빈 객체
for(let i = 0; i < str.length; i++){ // str[i] 를 반복해줄 반복문
if ( obj[str[i]] === undefined ) { // 빈객체 obj 안에 키 값으로 해당 문자가 없다면,, -> 내가 생각해내지 못했던 부분
obj[str[i]] = 0 // obj객체에 str[i] 을 넣고, 숫자는 0 으로 한다. -> 내가 생각해내지 못했던 부분
}
obj[str[i]]++ // 조건문이 나오자 마자 1이 더해진다. -> 이런 방법으로 추가를 할 수 있다는것에 놀램.
}
return obj
}
Q. 문자열을 입력받아 가장 많이 반복되는 문자를 리턴해야 한다.
주의 : 띄어쓰기는 제외.
가장 많이 반복된 문자가 다수일 경우 처음 문자를 리턴할 것.
빈 문자열일 경우 빈 문자열을 리턴할것.
ex.
let output = mostFrequentCharacter('apples not oranges');
console.log(output); // --> 'p'
의사코드
전 문제랑 비슷한 유형, 대신 제일 큰 수의 키값인 문자열을 리턴
빈 변수 3개를 선언하는데, 각각 숫자, 문자, 객체 가 되어야 겠다.
숫자는 카운팅을 할 때 쓸 것이고, 문자는 마지막에 리턴할 값을 담을 것이고, 객체는 비교를 위해 쓸 것이다.
일단 전 문제의 방법을 따라 해 본다.
function mostFrequentCharacter(str) {
let count = 0;
let string = '';
let obj = {};
for ( let i = 0; i < str.length; i++ ) {
if( obj[str[i]] === undefined ) {
obj[str[i]] = 0;
}
obj[str[i]]++ // 여기까지가 obj 값으로 문자는 키 로 숫자는 값으로 들어간 상황
// (ex. {a: 1, b: 1, ... }
if ( obj[str[i]] > string ) { // 이 조건문이 크기를 비교해 주는 조건문, 반복을 할 때 마다 string 에 obj[str[i]] 를 할당해주고,
// 할당받은 string 은 그 다음 obj[str[i]] 와 비교하여 크면 다시 재할당을 해준다.
string = obj[str[i]]
count = str[i]
}
}
return string;
}