[23.10.13] 오늘의 TIL

양챙챙·2023년 10월 13일
0

TIL

목록 보기
1/26

오늘 강의를 다 듣고나니 개인과제가 있다는걸 알아버렸다!
두둥!

매니저님이 개인과제 어렵다고 소문이 났는데 어떠신가요?!
하시면서 찾와주셨는데
아직 과제의 과도 못본 난.. 헉 개인과제!?
빨리 봐야겠는걸..!

하고 과제의 정체를 밝혔더니

1번째 과제는 ?!

두구두구두구둥!

문제 설명

📌 코딩테스트의 요구사항입니다. 처음에는 눈에 잘 안들어올 수 있고, 실제 문제보다 설명이 난이도가 높게 느껴질 수 있습니다. 이런 경우 입출력 예를 함께 보면서 능동적으로 읽어가면 크게 도움이 됩니다.

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

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

제한사항

📌 요구사항에 추가적으로 작용하는 제한사항입니다. 제한사항에 맞게 구현을 해야해서 꼭 읽어야 하지만, 문제를 풀어가는데 있어 힌트로 작용하는 내용도 많습니다.
  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

이 문제에 대한 답으로 나는

function solution(s){
    let answer = true;
    let pCount = 0;
    let yCount = 0;
    
    s = s.toLowerCase()
    for(i=0; i< s.length; i++){
        if(s[i] === 'p'){
            pCount++;
        }else if(s[i] === 'y'){
            yCount++;
        }
    }


    if(pCount !== yCount){
        answer = false;
    }
    
    return answer;

    
}

이렇게 제출했는데 사실 처음에는 대소문자 구분을 어떻게 할까 고민을 하다가 그냥

for(i=0; i<= s.length; i++){
        if(s[i] === 'p' || s[i] === 'P'){
            pCount++;
        }else if(s[i] === 'y' || s[i] === 'Y'){
            yCount++;
        }
    }
    

이렇게 1차원적인 방법으로 비교를 했다..
너무 1차원적인거 같아서 다른 방법이 없을까!?
하고 구글링해봤는데!

아니 이게머야!!

toLowerCase()	
//이 친구로 말할 거 같으면! 모든 문자열을 소문자로 바꿔준다는 그 녀석이잖아!

//머라고 저 친구의 친구가 있다구?!

toUpperCase ()
// toLowerCase()의 반대로 모든 문자열을 대문자로 바꿔준다!

찾아버렸다 너란 녀석..

toLowerCase()

이 함수를 사용해서 더욱 더 코드가 간결해져서 기분이 묘했다..


여기서 끝이 아니다..
다음 녀석이 날 기다리고 있었다..

다음 문제는?!

문제 설명

📌 코딩테스트의 요구사항입니다. 처음에는 눈에 잘 안들어올 수 있고, 실제 문제보다 설명이 난이도가 높게 느껴질 수 있습니다. 이런 경우 입출력 예를 함께 보면서 능동적으로 읽어가면 크게 도움이 됩니다.

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

제한사항

📌 요구사항에 추가적으로 작용하는 제한사항입니다. 제한사항에 맞게 구현을 해야해서 꼭 읽어야 하지만, 문제를 풀어가는데 있어 힌트로 작용하는 내용도 많습니다.
  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

이 문제에 대한 답으로 나는

function solution(absolutes, signs) {
    let answer = 0;
   
    absolutes.forEach((num, index) => {
        if(signs[index]){
            answer += num;
            return;
        }
        answer -= num;            
    })

    return answer;
}

이렇게 제출했다!
그래도 2번째 문제는 1번째보다 훨씬 빠르게 풀어냈다

컴파일링이 오래걸리는거같길래 뭔가 더 좋은 방법이없을까 하고 생각해봤더니

for문 이외의 다른 반복문중에서
forEach 문을 사용해봤다


세상에나 이게 무슨일이람!

for문 보다 훨씬 빠르게 동작하는걸 보고 무슨 차이가 있길래 forEach가 훨씬 빠르지?
하고 생각을 해보고 검색도 해본 결과

동기와 비동기의 차이

라는것을 깨달았다..

동기와 비동기의 자세한 차이점은

아직 남아있는 강의 영상을 통해서
궁금증을 해소하고 풀어나가야겠다..!

profile
성장중인 🐑챙챙

0개의 댓글