06
29

1. countStr

  • 문자열을 입력받아, 각 문자열의 요소를 키로, 그리고 문자열에서 반복되어 나온 횟수를 값으로 가지는 객체를 리턴.
function countStr(str) {
    let result = {}; // 빈 객체를 하나 만들어서 계산될 키와 값을 넣는다.
  for(let i = 0; i < str.length; i++) { // 반복문으로 입력받은 str 을 전부 돈다.
    if(result[str[i]] === undefined) { // 만약, str 의 요소가 result의 키로 없다면,
        result[str[i]] = 1; // 그것을 키로 넣고 값은 한번 반복되었으니 일단 1로 한다.
    } else {
      result[str[i]]++ // 요소가 반복되어 나오면 값을 올린다.
    }
  }
    return result; // 마지막으로 계산된 키와 값을 리턴시킨다.
}

2. objStr:count

  • 위의 문제와 마찬가지로, str을 입력받아서, 가장 많이 입력된 문자 하나를 리턴
function objStrcount(str) {
  let result = { multStr: '', count: 0 } // 새로운 객체를 선언하여, 가장 많이 입력된 문자와 그것을 count 할 키와 값을 할당한다.
  for(let i = 0; i < str.length; i++) { // 입력 받은 문자열을 돌고 돌아
    if(result[str[i]] === undefined) { // 입력 받은 문자열이 result 에 키로 없다면,
      result[str[i]] = 0; // 키로 문자를 넣고, 값은 0으로 한다.
    }
    if(str[i] === ' ') { // 입력받은 문자에 띄어쓰기가 있을경우 무시한다.
      continue;
    }
    result[str[i]]++ // 입력 받은 문자열이 result 에 키로 있다면 값을 하나 늘려준다.
    if(result.count < result[str[i]]) { // count 와 입력받은 문자열의 값을 비교한다. 이때, count 보다 더 많이 반복 되었다면,
      result.multStr = str[i] // 가장 많이 나온 문자로 바꿔주고
      result.count = result[str[i]] // count 도 그 문자열의 반복된 횟수만큼으로 바꿔준다.
    } // 이는 반복문으로, 계속해서 입력받은 문자열 들을 돌게 되고, 그 안에서 또 더 많이 반복된 문자열이 있다면 다시 할당 될 것이다.
  }
    return result.multStr; // 마지막으로 가장 많이 나온 문자열 하나를 리턴.
}

조금 당황할 수 있지만, 그렇게 어렵지 않게 풀렸다.
다른 사람들은 모두 배열로 바꿔서 풀었다고 한다. 모두 한 배열에 넣고 배열 안의
문자를 count 하면 가능은 할 것이다.
하지만 매우매우 복잡하고 효율이 떨어질 것이다.
객체가 배열보다 조금 더 복잡하지만, 조금 더 연습하면 완벽히 다룰 수 있을 것이다.

COMMENT