[프로그래머스/코딩테스트 모음/Javascript] 1

TED·2023년 8월 15일
0

Javascript CodingTest

목록 보기
1/63
post-thumbnail

<오늘의 문제>

  1. 문자열 내 p와 y의 개수
  2. 음양 더하기
  3. 문자열 내 마음대로 정렬하기

1. 문자열 내 p와 y의 개수

function solution(s){
    var answer = true;

    // 1. 대문자로 통일
    s = s.toUpperCase();
    
    // 2. for문을 통해서 문자열의 요소 하나하나씩을 비교
    // 2-1. p, y와 비교
    var num = 0;
    
    for (var i=0; i<s.length; i++) {
        if (s[i] === 'P'){
            num++;
        }
        if (s[i] === 'Y') {
            num--; 
        } // p나 y중 하나는 -값을 가져야 서로 동일한 갯수일떄 0값이 나와요.
    }
    // 3. 개수 체크(p와 y의 개수가 같은지를 체크)
    if (num === 0){
        answer = true;
    }else {
        answer = false;
    }
    return answer;
}
  • 소문자 대문자는 상관없이 따진 다고해서 대문자로 통일했다.

2. 음양 더하기

function solution(absolutes, signs) {
    var answer = 0;

    // 1. 두 배열을 비교해 가면서 값을 더하거나 빼줄 것
    // 1-1. 두 배열은 크기가 같음
    for (var i = 0; i<absolutes.length; i++){
    // 부호 (+, -) 에 따른 처리
        if(signs[i] === true){
            // 값이 true인 경우 (+)
            answer += absolutes[i];
        }else if (signs[i] === false) {
            // 값이 false인 경우 (-)
            answer += (-1) * absolutes[i];
        }
    }
    return answer;
}
  • 주석 그대로 해석하면 되는데
answer += (-1) * absolutes[i];
  • 이 식이
answer = answer - absolutes[i];
  • 이렇게 나타내도 같은 값을 갖는다는게 지금도 이해가안간다..ㅎㅎ...ㅎ
    사실 위의 식도 조금 더 생각해보려고하면 이해안가는건 매한가지다..
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;
}
  • 깔끔한 삼항연산자 풀이... ㅠㅠ 남의 풀이 ㅠㅠㅠ true, false 값을 구하는거라 사실 생각해볼수도 있는거였는데..식을 구성하는거 자체가 아직 내겐 너무 어색하고 낯설다..어렵다

3. 문자열 내 마음대로 정렬하기

  • 오늘의 하이라이트였고, 이해가 안되서 2시간은 넘게 헤맸고.. 지금도 마찬가지 _!~!~!~!@~!@~!@_
function solution(strings, n) {
    var answer = [];
    
    // 1. 문자열의 가장 앞 글자를 붙인 배열 만들기
    for (var i = 0 ; i < strings.length ; i++) {
        strings[i] = strings[i][n] + strings[i];
        // acar    =       a       +    car

    }
    // 2. 해당 배열을 사전순을로 정렬 (sort)
    strings.sort();
    
    // 3. 앞 글자 제거 후 리턴
    for (var j = 0; j < strings.length ; j++) {
        strings[j] = strings[j].replace(strings[j][0],"");
        answer.push(strings[j])
    }
    
    return answer;
}
  • 대충의 맥락은 이해를 했지만 후련한 이해는 불가능했다..
    이유는 다른 사람들의 sort() 활용 풀이를 봤기때문인데.....
function solution(strings, n) {
    strings.sort((a,b)=>{
        if(a[n] > b[n]) return 1;
        if(b[n] > a[n]) return -1;

        if(a > b) return 1;
        if(b > a) return -1;

        return 0;
    });
    return strings;
}
  • 도저히 내 머리로는 1, -1의 저 구조를 이해를 못하겠다..
    sort() 부분만 미친듯이 구글링하고 gpt의 도움도 받았는데 결국 이해하지 못했다.. a는 과거값 b는 현재값... 각 문자열도 유니코드 값으로 구분되어 차순을 정할수 있는 것.. 1(양수)일땐 뒤로가고,, -1(음수)일땐 그대로 두는걸로 알고있었는데 위와 같은 코드에서는 오히려 차순을 위해(뒤로 보내기위해) -1도 이용을 했다는 결말에 닿았지만 이해는 안간다..
function solution(strings, n) {
    strings.sort((a,b)=>{
        // if(a[n] > b[n]) return 1;
        // if(b[n] > a[n]) return -1;
        return (a[n] > b[n]) ? 1 : -1;
      	// 오름차순 !!
      	return (a[n] > b[n]) ? -1 : 1;
      	// 내림차순 !!
        // if(a > b) return 1;
        // if(b > a) return -1;
        return (a > b) ? 1 : -1;
      	// 오름차순 !!
      	return (a > b) ? -1 : 1;
		// 내림차순 !!
        return 0;
    });
    return strings;
}
  • 자체를 받아드리면 된다..
    이전값이 현재값보다 크면 1이 올때 오름차순 !
    이전값이 현재값보다 작으면 -1이 올때 내림차순 !
profile
컴맹 개발 입문자

0개의 댓글