ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL DAY 3 220718 알고리즘
    TIL 2022. 7. 19. 21:18
     

     

     

    항해 2주차 월요일 스타트 ..!

    내일은 알고리즘에 관한 모의고사가 있어서

    또 열심히 풀어보았다.

     

    아직도 문법을 검색하고 하지만

    어떤 방식으로 접근을 해야하는지 보이기 시작했다.

    팀원분들도 그렇고 나도 그렇고 각자의 방식으로

    공부하며 늘어가는게 보여서 좋았다.

     

    다들 고생하고 잠도 못자고 하는데

    그래도 점차 실력이 늘어나는게 보이니까 다행이라고 생각했다.

    순탄하지만은 않겠지만 함께

    목표에 도달했으면 좋겠다. 

     

     

     


     

    ※참고로 문제는 프로그래머스 문제


     

     

     

    *오늘 풀었던 문제들 목록

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

    2. 문자열 다루기 기본

    3. 핸드폰 번호 가리기

    4. 수박수박수박수박수?

    5.x만큼 간격이 있는 n개의 숫자

    6.부족한 금액 계산하기

    *사용 언어: 자바 스크립트


     

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

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

    단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

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

     

     

    • 내 코드

    의도: 모두 대문자로 바꾼 후에 P로 나눠진 문자열의 길이가 같으면 true / 아니면 false로 나오게끔 풀어봤다. 

    function solution(s){
        let ze = s.toUpperCase()
        if(ze.split('P').length  == ze.split('Y').length){
            sc=true
        }
        else{
            sc=false
        }
        return sc
    }

    정답이니까 통과

     

     


     

    2. 문자열 다루기 기본

    문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

    • 내 코드

    의도: 먼저 길이가 4 혹은 6 이라는 문제를 무시했었고 isNaN도 쓰면서 확신이 없었다. 

    function solution(s) {
      for (let i = 0; i < s.length; i++) {
        if (isNaN(Number(s[i]))) return false;
      }
      // 위의 모든 조건에 포함되지 않으면true 반환
      return true;}

     

     

     

    *배운 것(되새겨보자)

    isNaN() = 주어진 입력값이 숫자가 아니면 true 근데 '123' 이것도 문자열인데 숫자로 인식해서 false가 나온다

     

     


     

    3. 서울에서 김서방 찾기

    String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

     

    의도: 간만에 너무 간편한 문제가 나와서 한 숨 돌렸다^^

    • 내 코드
    function solution(seoul) {
        let findKim = seoul.indexOf("Kim");
        return '김서방은 ' + findKim + '에 있다';
    }

     

    정답이니깐 통과~

     

     


     

     

    4. 수박수박수박수박수?

    길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.       

    • 내 코드
    let answer = '';
    function solution(n) {
        for(i=0; i<n; i++){
            if(i % 2 == 0){
                answer +='수'
            }
            else{
                answer += '박';
            }
        }
           return answer;
    }

     

    • 정답 코드 (생각만 잘했으면 이렇게도 깔끔할 수 있다는 걸 배웠다.
    //좋았던 답변 
    function solution(n) { 
    return '수박'.repeat(n).substring(0,n);}

     

    느낀 점: 자꾸 써본 것, 익숙한 것을 사용하려는 습관이 들은 듯 싶다. 찾아봐서 괜찮은 함수면 써보는 습관이 필요할 것 같다.

     


     

    5. 완주하지 못한 선수( 개인적으로 상당히 어려웠다. 식이 길어지면 너무 복잡하게 코드를 짜는 것 같다.)

     수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

    마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

     

    의도: 기억이 맞다면 먼저 수학에서 차 집합을 하듯이 빼주려는 의도를 가지고 하다가 동명이인때문에 for문을 돌려서 빼내보자라는 생각으로 코드를 작성했던 것 같다.

    • 내 코드
    function solution(participant, completion) {
        let par = participant.sort()
        let com = completion.sort()
        
        for (var i = 0; i < participant.length; i++){
            if(participant[i] !== completion[i]){
                answer = participant[i];
    //뒤는 삭제해려서 어떻게 작성했는지 모르겠다.
    • 정답 코드
    function solution(participant, completion) {
        let par = participant.sort()
        let com = completion.sort()
        
        for (var i = 0; i < participant.length; i++){
            if(participant[i] !== completion[i]){
                answer = participant[i];
                break
            }
        }
        return answer;
    }

    배운 점

    break: 반복문중 브레이크를 걸 수 있다.

     


     

    정수 제곱근 판별

    문제 설명

     

    임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.

    n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

     

    의도 = mes라는 변수를 n의 제곱근을 주고

    mes의 제곱근과 == palseint(mes) 정수로 바꾼 mes가 같으면 mes +1 의 제곱을 하려고 했는데 안됐다 ㅎㅎ;

     

    • 내 답변
    function solution(n) {
        var answer = 0;
        var mes = Math.sqrt(n);
        if(mes == Palseint(mes)){
            answer = mes+1
            answer = answer * answer
            return answer
        }
        else{
            return answer = -1;
        }
    }
    • 정답1
    function solution(n) {
      // 숫자의 제곱근을 반환한다. 144 -> 11
      const sqrt = Math.sqrt(n);
    
      // 제곱근이 정수가 맞는지 판단한다.
      if (Number.isInteger(sqrt)) {
        // 제곱근이 정수가 맞다면 1을 더한 후 그에 대한 제급을 리턴한다.
        // 11 -> 12 -> 144
        return (sqrt + 1) ** 2;
      }
    
      // 정수가 아니라면 -1을 반환한다.
      return -1;
    }
    console.log(solution(121)); // 144
    console.log(solution(3)); // -1

     

    아쉬웠던 점 : 너무 직관적이고 직관적인 코드를 짠것

    배운 것 : 제곱근 함수 Math.aqrt() / 거듭제곱 함수 ** / isInteger()함수 

     - 정수 확인법 : isInteger() 이 함수는 정석적으로 값이 정수이면 True를 반환하고 아니면 False를 반환한다.

     - 정수 확인법2 : 나머지를 활용하여 %1 했을 때 나누어 떨어지면 정수인 것으로 확인할 수 있다.

     

     

     

    'TIL' 카테고리의 다른 글

    TIL DAY6 220724 리액트 입문주차 2  (0) 2022.07.24
    TIL DAY5 220723 리액트 입문 시작  (0) 2022.07.24
    TIL DAY 4 220719  (0) 2022.07.19
    TIL DAY 2 22-07-16  (0) 2022.07.16
    TIL DAY 1 22-07-15  (0) 2022.07.16
Designed by Tistory.