객체& 배열 오답노트

김병민·2021년 4월 25일
0

배열 24번

0~9사이의 정수를 배열로 입력받아 전화번호 형식의 문자를 리턴하라

  • 주의사항

    	string으로 리턴
    	for, while문 금지
    	배열의 길이가 8인 경우 앞에 [0,1,0]이 있다고 가정
  • 입출력 예시

let output = createPhoneNumber([0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
console.log(output); // --> '(010)1234-5678'

output = createPhoneNumber([8, 7, 6, 5, 4, 3, 2, 1]);
console.log(output); // --> '(010)8765-4321'

output = createPhoneNumber([0, 1, 1, 4, 3, 2, 1, 8, 7, 6, 5]);
console.log(output); // --> '(011)4321-8765'
  • 풀지 못했던 이유
    길이가 8인 문자에 대해 010을 붙여줘야했는데 그걸 인지하지 못하고 010, 070, 011등 각 각의 조건문을 정해줌
function createPhoneNumber(arr) {

  //8자리와 11자리를 나타낼 길이변수 선언
  let length = arr.length
  // 가운데 자리와 마지막 자리 변수 선언
  let mid = arr.slice(length-8,length-4)
  let last = arr.slice(length-4,length)
  
  
// 11자리인때 리턴
 if(length===11){
    return "("+ arr.slice(0,length-8).join("") +")" + mid.join("") + "-" + last.join("") 
  }  
  //나머지 경우 010붙여서 리턴 
  return "(010)"+ arr.slice(0,4).join("") + "-" + arr.slice(4.8).join("")
  

}

객체 20번

문자열을 입력받아 문자열을 구성하는 각 문자를 키로 갖는 객체를 리턴
각 키의 값은 해당 문자가 문자열에서 등장하는 횟수를 의미

  • 입출력
let output = countAllCharacters('banana');
console.log(output); // --> {b: 1, a: 3, n: 2}
  • 풀이
function countAllCharacter(str){
  //빈 값을 넣어줄 빈 객체 생성 why? 빈 문자열 이면 빈 객체 반환이니까
	let obj = {}
    for(i=0;i<str.length; i++){
      //첫 문자부터 마지막까지 반복해서 확인해야함
    let key = str[i]
    // key값이 obj에 키로 있으면 +1을 해주고 없으면 처음이라는 거니깐 0을 넣어줘야함
    if(!(key in obj)){
		obj[str[i]] = 0;
   }
   obj[str[i]] ++;
  }
return obj;
}

객체 21번

문자열을 입력받아 가장 많이 반복되는 문자를 리턴

  • 주의사항
    -- 띄어쓰기는 제외
    -- 가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자 리턴
    -- 빈 문자열을 입력받은 경우 빈 문자열 리턴
  • 입출력 예시
let output = mostFrequentCharacter('apples not oranges');
console.log(output); // --> 'p'

output = mostFrequentCharacter('hello world');
console.log(output); // --> 'l'

output = mostFrequentCharacter('   ');
console.log(output); // --> ''

output = mostFrequentCharacter('');
console.log(output); // --> ''

output = mostFrequentCharacter('abba');
console.log(output); // --> 'b'
  • 문제점

빈 문자열을 제외하는 방법 ...

  • 풀이
function mostFrequentCharacter(str){
  // obj 변수 선언하고 그 안에 최대값의 횟수랑 문자 넣기
	let obj= {max: 0 , char: ""}
    // i는 길이만큼 반복
	for(i=0;i<str.length; ++i){
      // 빈 문자열이라면 continue로 지나치기 !
		if(str[i]===" "){
			continue;
	}
      // 20번과 같음
      let key = str[i]
      if(!(key in obj)){
		obj[str[i]] = 0;
      }
      obj[str[i]] ++
      // 기존의 max와 비교하여 크다면 넣어주고 
      // char같도 해당 문자로 바꿔주기
      if(obj[str[i]] > obj.max){
		obj.max = obj[str[i]];
        obj.char = str[i];        
      }
    }
  return obj['char'];
}
profile
I'm beginner

0개의 댓글