항해99 개발일지

01-19 일지

카로루딘 2023. 1. 20. 01:26

오전 : 2일차 수업 진행

특이사항

개념 이해가 주가 되는 시간이었다. 함수와 객체의 기본 문법에 대한 자료를 읽고 이해하는 것이었는데, 해쉬 구조에 대해 팀원이 이해할 수 있게 설명하는 것을 따로 준비했어야 했다.

자바스크립트의 구조는 확실히 이상하다. 클래스 개념이 없는 것이 내겐 너무 생소하다. 다른 언어와 비교했을 때 상속 개념도 존재하지 않는다. 클래스를 활용하는 스크립트에서는 접근 제한자를 사용하는 것으로 타 클래스가 본 클래스의 변수 혹은 함수의 접근을 조절할 수 있는데 자바스크립트에는 그게 없는 것이다. 흐음? 대신 자료의 형변환이 내부 로직에서 자동으로 수행되는 점은 꽤나 간편한 것 같다.

 

오후 : 2일차 수업 진행 및 프로그래머스 독학

특이사항

프로그래머스 문제 중 문자열 배열에서 특정 값을 찾는 문제에서 난항을 겪었다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let result = 0;
function solution(babbling) {
let words = ['aya','woo','ye','ma']
 
for(let i = 0; i < babbling.length; i++)
    {
        for (let x = 0; x < words.length; x++){
 
           babbling[i] = babbling[i].replace(words[x], '');
        }
        if(babbling[i] === ''){
            result++;
        }
    }
return (result);
}
cs

배열 babbling을 받는 solution 함수에서 for문을 돌려 words 배열을 찾는 문제였다. 문제로 제시된 문자열을 순회하며, 목표로 하는 문자열과 매칭시켜 삭제한 다음, 완벽하게 삭제된 문자열의 갯수를 구하는 문제로 파악하고 이를 코드로 짰고 테스트 케이스에 통과했다. 하지만 채점 후 제출을 하니 정확도가 82%로 실패했다고 반려되는데 그 이유를 통 알 수가 없었다. 기술 매니저님이 순회도실 때 이 문제에 대해 물어봤는데 스스로 설명하는 도중 예외처리에 대한 맹점을 파악했다.

‘ywooe’같은 문자열을 처리할 때 ‘woo’를 빼고 ‘ye’가 남는데, 이것까지 빼버리면서 문제가 발생했다는 것이다. 이를 해결하기 위해선 공백처리를 바로 하지 않고 @같이 제한사항 밖의 특수문자로 예외사항 처리를 진행하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let result = 0;
function solution(babbling) {
let words = ['aya','woo','ye','ma']
 
for(let i = 0; i < babbling.length; i++)
    {
        for (let x = 0; x < words.length; x++){
 
           babbling[i] = babbling[i].replace(words[x], '@');
        }
           babbling[i] = babbling[i].replace(/@/ g, '');
        if(babbling[i] === ''){
            result++;
        }
    }
return (result);
}
cs

문제의 제한사항에 특수문자는 포함되지 않는다고 했기에 공백처리로 지우지 않고 @로 대체한 다음 @를 한꺼번에 지워버렸다. 이렇게 해서 남은 결과값이 공백이면 result 값에 1씩 더하는 것으로 문제를 해결했다.

 

저녁 : 단체 발표

특이사항

다른 팀의 한 동기분께서 11시에 단체로 모여 코드 리뷰 겸 발표를 해보는 시간을 갖자고 했다. 참석해보니 오랜만에 OT주차 동료들도 만나서 반가웠는데 푸는 문제들 자체는 꽤나 단순했다. 흠.....기억나는 문제가 양꼬치 문제이다.

https://school.programmers.co.kr/learn/courses/30/lessons/120830

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1
2
3
function solution(n, k) {
    return (12000 * n + 2000 * (k - Math.floor(n / 10)));
}
cs

답안은 이것이다. 다른 발표자들은 대부분 변수를 선언하고, for문을 돌리면서 변수에 값을 할당하고 return했지만 간단한 계산은 return 선에서 끝낼 수 있다는 것을 우리 팀원 한 분이 발표하셨다. 내가 쓴 것도 순서만 다르지 식 자체는 똑같이 진행되었다. 배우는게 아주 빠른 팀원이시다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/120831

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

다음으로 진행한 것은 짝수의 합. 여기서도 다들 for문을 돌리면서 안에 나누기를 진행하여 풀었지만 나는 좀 다르게 진행했었다.

1
2
3
4
5
6
7
function solution(n) {
    let result = 0;
    for(let i = 0; i <= n; i = i + 2){
        result += i;
    }
    return result;
}
cs

for문의 증감식에 변화를 준 것이었다. 짝수를 구하는 것이기 때문에 i의 값을 0부터 시작해서 2씩 올리고, 이걸 전부 더하기만 하면 원하는 숫자의 짝수 합을 구할 수 있는 것이다.

 

정리

해쉬 구조? 어렵다. 람다식? 알 것도 같은데 뭔가 2% 모자르다.

 

 

 

'항해99 개발일지' 카테고리의 다른 글

01 - 16 ~ 01 - 20 정산  (0) 2023.01.23
01-20 일지  (0) 2023.01.20
01-18 일지  (0) 2023.01.19
01-16~01~17 일지  (0) 2023.01.18
01/ 09 ~ 01 ~14 정산  (0) 2023.01.15