상세 컨텐츠

본문 제목

프로그래머 도전기 27일차

프로그래머가 될거야!

by Choyee 2023. 9. 25. 00:49

본문

오늘은

오늘은 주말입니다 일요일이라 여유롭게 점심을 먹고

카페로 향했습니다 

JavaScript에 대한 강의도 듣고 

코딩 테스트도 연습하고 

여유롭지만 코딩을 놓지 않았던 주말이었습니다

 

JavaScript

<비교 연산자>

==, != 이중등호 - 두 값이 같은지 알 수 있다
                   타입은 구분하지 않음 => 두 값이 다른 타입이면 같아지도록 강제로 변환한다
                 -> 1 == '1' = ture
                 -> 1 != '1' = false

===, !== 삼중등호 - 엄격한 동등 연산자
                  - 타입 구분, 값과 타입 모두 비교 => 같은 타입으로 변환하는 과정을 거치지 않음
                  -> 1 === '1' = false
                  -> 1 !== '1' = true

<Console 명령어>
alert = 사용자에게 뭔가를 출력해주지만 콘솔에서 출력하진 않음
          팝업창으로 띄워준다

prompt = 팝업창으로 입력을 받아서 값으로 적용시킨다
-> let userInput = prompt("please enter a number")
     = 숫자를 입력하라는 창이 뜬다 -> 숫자를 입력하면 userInput의 값이 "그 숫자"가 된다(문자열이된다)

parseInt( ) = 문자열을 숫자로 바꿔줌

JavaScript 파일을 실행할 편집기 = VSCode
이름.js 로 파일 저장

<조건문>
if문, if - else문, if - else if - else문

if(조건) {
   실행문   // 조건-> true인 경우 실행O / false인 경우 실행X
}

if(조건1){
    실행문1
} else if (조건2){
    실행문2
} else if (조건3){
    실행문3

  => 조건1이 거짓이면 else if 로 넘어가고 조건2도 거짓이라면 그 다음 else if문으로 넘어간다

else 구문 = 조건에 매치되는 것이 없으면 마지막으로 실행되는 것 = 맨 마지막에 오는 것
                위의 if 조건문들이 참이 아닌지만 확인
                else 구문을 사용하지 않아도 된다

if문 안의 if문 = 조건문 안에 조건문 넣기
                   중첩을 사용하면 프로그램이 느려질 수 있다


<truthyness, falsyness>
= Truth-y값, False-y값
* False값
false
0
""(empty string)
null
undefined
NaN
=> 나머지 = True값


<논리 연산자>

다른 두 표현식을 합쳐 여러 논리를 하나로 결합함 -> 하나의 큰 논리 형성 가능
and && = 왼쪽과 오른쪽이 모두 true 여야 ture 값을 얻을 수 있다 => 둘중 하나라도 거짓이라면 거짓
 or || = 둘중 하나라도 참이라면 결과는 true => 둘 다 거짓이어야 결과가 false로 나온다
not ! = 두 표현식을 결합하지는 않지만 표현식에 작용 -> 값을 반전시키는 역할

<switch-case구문>
switch = 기본적으로 일치하는 항목을 찾는 일을 한다
           일치하는 항목을 찾으면 거기서부터 코드를 실핼하기 시작
           중단 지점까지 계속 실행 
            => break를 만날때까지 실행
default case  = default: => 기타 값이 입력돼서 아무것도 일치하지 않는 경우

 

 

코딩 테스트
Description
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(my_string, n) {
    var answer = '';
    // 각 문자를 n만큼 반복
    // repeat 함수 사용
    
    for(var i = 0; i < my_string.length; i++){
        answer += my_string[i].repeat(n);
    }
    return answer;
}

repeat() 함수를 사용하면 간단히 문자열의 각 요소를 반복하게 할 수 있습니다

 

 

Description
문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.
function solution(str1, str2) {
    var answer = 0;
    //str1 안에 str2가 있다면 = 1
    //str1 안에 str2가 없다면 = 2
    // String.includes() 사용
    
    if (str1.includes(str2)){
        answer = 1;
    }
    if (!str1.includes(str2)){
        answer = 2;
    }
    return answer;
}

 String.includes() 함수의   ()괄호 안에 확인하고 싶은 문자열을 넣어주면 String안에 해당 문자열이

있는지 없는지 판단을 해줍니다

그렇게 해서 있다면 1의 값을, 없다면 2의 값을 return하도록 하였습니다

 

 

Description
문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
function solution(my_string, letter) {
    var answer = '';
    
    //my_string 에서 letter 제거
    // .replace() 사용
    // RegExp 객체를 활용
    // let regexAll = new RegExp(pattern, "g"); // 모든 패턴을 찾음
    // let regexAllCase = new RegExp(pattern, "gi"); // 대소문자 구분 없이 모든 패턴을 찾음
    
    var regexAllCase = new RegExp(letter, "g")
    
    answer = my_string.replace(regexAllCase,"");
    
    return answer;
}

.replace() 함수를 이용하여 해결해보려고 하였지만 변수로 문자를 받아와서 사용하기가 어려워

다른 방법을 찾아보니, let 이름 = new RegExp(pattern, "g");라는 함수가 있어서 사용해보았습니다

정규표현식이라는 것을  사용하는데

정규표현식이란 일정한 ‘패턴’을 가진 ‘문자열’의 ‘집합’을 표현하기 위해 사용하는 ‘형식 언어(formal language)’라고 합니다

문자열을 대상으로 ‘패턴 매칭 기능’을 제공하는데

이 기능은 특정 패턴과 일치하는 문자열을 검색, 추출, 치환(대체)할 수 있는 기능을 말합니다

새롭게 알게 된 개념이라서 이해하는데에 약간 어려움이 있었지만

문제를 해결하는데에는 큰 도움이 되었습니다

 

Description
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
function solution(price) {
    var answer = 0;
    // 10만원 이상 30만원 미만 = 95%
    // 30만원 이상 50만원 미만 = 90%
    // 50만원 이상 = 80%
    
    if(100000 <= price && price < 300000){
        answer = Math.floor(price * 0.95);
    }else if(300000 <= price && price < 500000){
        answer = Math.floor(price *0.9); 
    }else if(price >= 500000){
        answer = Math.floor(price * 0.8);
    }else{
        answer = Math.floor(price);
    }
    return answer;
}

코드 자체에는 문제가 없어보였지만 정답 확인을 위해 거치는 테스트 단계에서 한두번씩 오류가 생겼었습니다

천천히 문제를 다시 살펴보니

제한사항
10 ≤ price ≤ 1,000,000
price는 10원 단위로(1의 자리가 0) 주어집니다.
소수점 이하를 버린 정수를 return합니다.

이렇게 제한사항이 있었습니다...

그래서 소수점 이하를 버리는 함수인 Math.floor() 를 사용하여 정수값을 return받아 해결할 수 있었습니다

 

 

 

2023. 09. 24 (일)

 

관련글 더보기