스스로에게 2023. 5. 23. 23:46

1.대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

function solution(s){
    var answer = false;
    var p = 0
    var y = 0
    s = s.toUpperCase()

    for(let i= 0; i< s.length; i++ ){
        if(s[i]=== "P"){
            p = ++p
        }
    }
    for(let i= 0; i< s.length; i++ ){
        if(s[i]=== "Y"){
            y = ++y
        }
    }

  if( p - y === 0 ){
    answer = true
  }
    return answer;
}

console.log(solution("pPoooY"))//false
console.log(solution("pPoooy"))//true
console.log(solution("pPoooyY"))//true
console.log(solution("ppy"))//false
//모범답안
function solution(s){
  var result = true;
  s = s.toUpperCase();
  var num = 0;
  for(var i = 0; i < s.length; i++){
    if(s[i] === 'P') num++; // p이면 갯수 더하기
    if(s[i] === 'Y') num--; // y이면 갯수 빼기
  } 
  result = (num === 0); // p, y 갯수가 같으면 0 (p가 많으면 양수, 반대 음수)

  return result;
}

딱봐도 너무 지저분하다 for문 안에 if문으로 두 가지 경우를 모두 다룰 수 있었으며 p와 y 두 변수를 만들어 빼는 게 아니라 하나의 변수로 증감을 하면 더 깔끔하다는 것을 배웠다 그리고 증감식이나 if문도 조금 더 깔끔하고 알아보기 쉽게 만드는 것을 배웠기에 잘 기억하고 활용해야겠다

 

2.어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

function solution(absolutes, signs) {
    var answer = 0
    for(let i = 0; i< absolutes.length; i++){
        if(signs[i]){
            answer += absolutes[i] 
        }else{answer -= absolutes[i]}
    }
    return answer
}


console.log(solution([4,7,12],[true,false,true])); // 9
console.log(solution([1,2,3],[false,false,true])); // 0
// 모범답안
function solution(absolutes, signs) {
    let answer = 0;
		// 두 배열 길이 같음
    for (let i = 0; i < absolutes.length; i++) {
				// 부호에 따라 +-
        signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
    }
    return answer;
}

 

이것도 마찬가지로 정답을 조금씩 봐가면서 열심히 짠 코드인데 같은 동작을 하는 함수이고 결과값도 맞게 나왔다 하지만 삼항연산자로 조금 더 깔끔하게 했다면 좋았을 것 같다

 

일단은 정답을 보고 그대로 따라한 게 아니라 참고하여 나름대로 생각하고 만들어봤다는 것에 의의를 두자