상세 컨텐츠

본문 제목

프로그래머 도전기 32일차

프로그래머가 될거야!

by Choyee 2023. 9. 29. 23:44

본문

오늘은

오늘은 추석입니다

아침에 차례를 지내고 저녁에는 잠시 친척분들이 다녀가셔서

어수선했던 하루였습니다

그래서 생각보다 공부를 많이 하지는 못했는데요

추석은 추석이니까 너무 자책하지는 않으려고 합니다...하하

 

JavScript 공부

 

<객체>
객체에서 { } 중괄호를 쓰는 경우 = 객체를 만들어 낼 때(선언할 때) 뿐이다
데이터에 엑세스 하려는 경우 = [ " " ] 대괄호를 쓴다, 대괄호 안에는 " ' 따옴표를 쓴다
                                    = 문자열 . 요소이름 으로도 호출 가능

객체에 정보 추가, 업데이트
 = 대괄호와 따옴표를 써서 안에 표현식을 넣거나 점 구문을 써서 갑에 엑세스하거나 
    값을 업데이트하고 또 새로운 프로퍼티(속성 = 객체 내부의 속성)를 만들 수 있다

<중첩구조>
객체로 된 배열, 안에 객체가 있는 객체, 안에 배열이 있는 객체

배열과 객체를 합친 것
=> 순서가 있는 데이터 -> 배열에 넣으면 안되는 경우
     키-값 쌍을 저장했는데 일부가 순서가 있는 경우
     => 배열을 사용 


<반복문>
Loops
같은 일이 연속으로 반복되길 원할 때 => 루프를 활용해서 반복 가능
= 어떤 기능을 반복하는 방법
=> 배열에도 루프를 적용시킬 수 있다

for문
for(변수 i = 시작점; 반복횟수; 증감식){
    실행문
} => 값이 true인 동안 반복, false 가 되면 반복문 탈출
루프가 실행될 때마다 실행문의 코드 실행

=> 변수가 있는 초기 표현식, 변수 = 카운터와 비슷한 것;
     얼마나 오랫동안, 언제까지 루프를 실핼할지 명령하는 조건;
     증감식 = 사칙연산 모두 사용 가능

=> 조건식이나 증감식을 잘못 사용하면 무한루프가 되는 문제가 있다

중첩 루프 = Nested Loops
for루프 안에 또다른 for 루프

while문
for 루프보다 훨씬 단순
while(조건문){
    실행문
    증감식;
    break;
}

break 키워드
while문에서 자주 쓰인다
break 가 없으면 while문이 참인 경우 계속 반복하게 된다
이럴 때 break 키워드를 사용하여 while루프를 벗어날 수 있게 해준다

for..of
= for 루프 기능 개선
문자열 각각 출력 -> for 루프 사용
-> for(만들게 될 변수의 이름 of 반복 가능한 개체){
           실행문;
    }
    => 배열 안에 있는 개체를 반복
    => 인덱스가 꼭 필요한 경우에는 일반 for 루프를 쓰는 것이 낫다

ex)
const subreddits = ['book', 'apple', 'bananan', 'dog', 'cat', 'chicken', 'duck']

for(let sub of subreddits){
    console.log(sub)
}
=> 이중 for문에서도 적용 가능    
=> 배열이 아닌 다른 객체도 반복 가능하다

<객체 루프>
중괄호를 쓴 키-값 쌍의 실제 객체 리터럴 = 반복 가능한 객체로 인식X
(=> JavaScript에서 객체는 헷갈리는 용어일 수 밖에 없다)
(=> 객체의 length는 없다 = 배열이나 문자열이 아니기 때문)
=> 객체에서 반복을 시킬 수 있는 방법
     1. for...in 루프 (잘 쓰이지는 않음)
        => 객체에서의 키를 반복해준다 -> 키를 알고 있으면 값을 출력해낼 수 있음
     2. Object.keys() => 키 배열 반환/Object.value() => 값 배열 반환/
         Object.entries() => 키,값 쌍으로 된 배열을 반환 메서드 이용
        => 이 메서드들을 이용해서 객체의 length값을 만들어 낼 수 있다

 

 

 

코딩 테스트
Description
문자열 myString이 주어집니다. myString에서 알파벳 "a"가 등장하면 전부 "A"로 변환하고, "A"가 아닌 모든 대문자 알파벳은 소문자 알파벳으로 변환하여 return 하는 solution 함수를 완성하세요.
function solution(myString) {
    var answer = '';
    myString = myString.toLowerCase()
    for(var i = 0; i < myString.length; i++){
        if(myString[i] == "a"){
            myString = myString.replace(/a/g,'A');
        }
    }
    return myString;
}

replace()함수와 정규표현식을 사용하여 소문자'a'를 대문자'A' 모두 바꾸어주었습니다

 

Description
알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
function solution(myString) {
    return myString.replace(/[a-k]/gi,'l');
}

정규표현식이 익숙치 않아서 헤맸던것에 비해 간단한 코드로 해결됐던 문제입니다

정규표현식 안에 대괄호로 범위를 정해서 한꺼번에 해당되는 알파벳들을 찾아낼 수 있었습니다

 

Description
단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
function solution(my_string) {
    var answer = [];
    my_string = my_string.split(" ");
    for(var i = 0; i < my_string.length; i++){
        if(my_string[i] != ""){
            answer.push(my_string[i]);
        }
    }return answer
}

split()함수를 사용하여 공백을 기준으로 문자열을 나누고

그 문자열을 push()함수를 이용하여 answer의 요소로 넣어주었습니다

 

Description
정수 배열 arr과 정수 n이 매개변수로 주어집니다. arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을, arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요.
function solution(arr, n) {
    // arr.length % 2 != 0
    // arr[i] i % 2 == 0 + n 
    // arr.length % 2 == 0
    // arr[i] i % 2 != 0 + n
    
    var oddSum = [];
    var evenSum = [];
    
    for(var i = 0; i < arr.length; i++){
        if(i % 2 != 0){
            oddSum.push(arr[i]+n);
            evenSum.push(arr[i]);
        }else{
            oddSum.push(arr[i]);
            evenSum.push(arr[i]+n);
        }
    }
    return arr.length % 2 != 0 ? evenSum : oddSum;
}

차근차근 문제를 해석하여 조건을 나누어 반복문을 사용해서 조건에 대한 합을 각각 나누어주고

그 합에 대한 조건을 삼항연산자를 활용하여 해결하였습니다

 

Description
길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
function solution(my_strings, parts) {
    var answer = [];
    // return my_strings[1].slice(parts[0][0],parts[0][1])
    for(var i = 0; i < my_strings.length; i++){
            answer += (my_strings[i].slice(parts[i][0],(parts[i][1]+1)))
        }
    return answer;
}

중첩 배열의 특성을 활용하여 해당 인덱스를 차례로 slice해주어 해결하였습니다

 

Description
정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.
function solution(arr, delete_list) {
    for (var i = arr.length - 1; i >= 0; i--) {
        if (delete_list.indexOf(arr[i]) != -1) {
            arr.splice(i, 1);
        }
    }
    return arr;
}

indexOf()함수를 활용하여 delete_list와 arr의 해당 인덱스 요소를 포함하는지 확인해서 

-1값이 아니면 즉 포함하고 있다면 splice()함수를 활용하여 해당 인덱스를 삭제할 수 있도록 하여 해결하였습니다

 

 

 

 

2023. 09. 29 (금)

관련글 더보기