Pre-Project를 완료하고 돌아보면 개선할점, 아쉬웠던 점이 많은 것 같다.
특히 치열하게 개발하지 않았다는 부분이 제일 안타까운데 
일정한 양을 정해놓고 그 부분을 완료하고 나면 시간적인 여유가 생겨 마음을 많이 놓고 개발한 것 같다.
페이지네이션, 유효성검사, 결과에 따른 링크이동 등도 협의되지 않았지만 추가한 기능으로 스스로 만족했지만
다른 팀의 프론트엔드를 보면 더 많은 페이지를 구현한 모습을 볼 수 있었다.
이제 css적으로는 크게 밀리지 않았지만 디자인적인 감각이 올라온 것은 아니기 때문에
Main-Project로 넘어가게 되면 디자인감각이 떨어지는 css가 발목을 잡을 것 같다.

다음 프로젝트에는 최대한 빠르게 맡은 기능들을 완성하고 개선점을 찾고
추가할 수 있는 기능들을 추가하고 남는 시간에 테스트도 꾸준히 해 좋은 결과물을 만들어야겠다.

 


CT(1).알파벳이라는 문제는 a~z까지의 문자열만 남도록 다른 문자열은 다 지우고 추가로 작성해 a~z순서의 26글자를 만드는 문제로 필요없는 문자를 지운 후 얼만큼 더 글자를 추가해야만 a~z가 되는지를 묻는 문제였다.
발상의 전환을 하면 간단한데(원래 이렇게 푸는것일지도..?) 아스키코드로 변환한 후 오름차순 부분배열 문제처럼 해결하면 된다. 코드는 아래와 같다.

let input = `aiemckgobjfndlhp`

let dp = new Array(input.length+1).fill(0)
let result = 0
for(let i = 0 ; i < input.length ; i++){
    let max = 0 //현제 max값
    for(let j = 0 ; j < i ; j++){
        if(input[i].charCodeAt() > input[j].charCodeAt() && dp[j] > max){
            max = dp[j] //i가 종착지이므로 i기준 작은 숫자들 중 dp[j]보다 max값이 클 경우 dp[j]값을 가져온다.(i가 더 큰 숫자인게 확정이므로 제일 큰 max값보다 +1을 아래에서 처리한다.
        } 
    }
    dp[i] = max +1
}
for(let i = 0 ; i < dp.length ; i++){ //각 위치를 최대값으로 했기 때문에 맨 마지막이 최대값이 아니다. 값이 현재 result보다 커질 때 마다 재할당한다.
    if(result < dp[i]){
        result = dp[i]
    }
}

console.log(26-result) 필요한 a~z 26글자에서 현재 보유한 오름차순 부분수열의 수치를 뺸 값을 출력


CT(2).짝수와 홀수라는 문제는 num%2를 if문을 통해 해결했다..

CT(3).자릿수 더하기는 String으로 문자열로 바꿔준 다음 idx로 조회해서 숫자값을 더해줬다.

CT(4).약수의 합은 for문으로 1~n까지의 숫자를 각자 나눠 나머지가 0인 경우 answer에 더해줬다.

CT(5).정수 제곱근 판별은 Math.sqrt와 Math.round(Math.sqrt)값을 비교해 같을 경우 제곱근이라고 판단해줬다.

CT(6).평균구하기는 i = 0,  i < arr.length로 범위설정한 후 idx값들을 다 더한 다음 length로 나눠줬다.

CT(7).자연수 뒤집어 배열로 만들기는 String(n).split('').reverse().map(Number)로 해결했다.

CT(8).문자열 내 p,y의 갯수는 변수 p,y를 0으로 설정한 뒤 P,p가 나올 경우 +1 Y,y가 나올 경우 +1을 한 다음 p와 y의 값을 비교해 같으면 true 다르면 false를 반환했다.
0,0도 true가 나온다고 했기 때문에 더 간단했다.(보통은 -1로 출력하라고 한다.)

CT(9).정수 내림차순으로 정렬하기는 Number(String(n).split('').map(Number).sort((a,b) => b - a).join(''))를 통해 해결했다.

CT(10).하샤드 수라는 문제는 간단하게 str로 변경한 후 자릿수로 나누면 될줄 알았는데 4개정도가 실패로 나왔다. 자릿수라는게 길이가 아닌 총 숫자의 합인걸 지금 파악해서 for문으로 자릿수를 구해준 후 나머지를 통해 결과를 구해줬다.

CT(11).x만큼 간격이 있는 n개의 숫자는 for문으로 0부터 n미만의 범위로 result.push(x + x*i)로 해결했다. 첫번째 값은 원래 값이기 때문에 0부터 시작이다.

CT(12).콜라츠 추측은 while문을 사용해 answer < 500 && num !== 1조건으로 비교하고 내부에서는 num%2를 통해 홀짝을 구분해 처리해줬다. 그리고 answer가 500인 경우 -1을 리턴했다.

CT(13).두 정수 사이의 합은 a~b까지의 합을 for문으로 진행했는데 오답이 나와서 자세히 보니 a,b의 대소가 정해지지 않았다. a와 b를 if문으로 비교한 후 else문으로 반대조건을 넣었다.

CT(14).김서방찾기는 백틱을 이용해  `김서방은 ${seoul.indexOf("Kim")}에 있다`로 처리했다.

CT(15).핸드폰 번호 가리기는 if문을 통해 종료값-4부터 코드를 기입하고 그 전까지는 *을 추가하는 방식으로 해결했다.

CT(16).제일 작은 수 제거하기는 Math.min(...arr)를 통해 값을 구했고 그 값을 filter로 제거했다. 물론 이 방법은 중복값이 없는 조건이었기 때문에 가능했다.

CT(17).나누어떨어지는 숫자 배열은 arr.filter(el => el%divisor === 0).sort((a,b) => a-b)로 처리한 후 if문으로 length만 체크해줬다.

CT(18).음양더하기는 for문 내부에 if문으로 signs[i]만 체크해서 + / - 중 하나를 처리하면 되는 문제였다.

CT(19).수박수박수는 for문에서 i%2를 기준으로 수 또는 박을 더해주면 되는 문제다.

CT(20).가운데 글자 가져오기는 s.slice(Math.round(s.length/2)-1, Math.round(s.length/2)), s.slice(s.length/2 -1, s.length/2 +1)를 if문을 통해 분기해 풀었다.

CT(21).최댓값과 최솟값은 s.split(' ').sort((a,b) => a-b)을 통해 오름차순의 배열로 만든 후 shift, ' ', pop을 더한 결과를 출력했다.

CT(22).없는 숫자 더하기는 if(numbers.indexOf(i) === -1)로 비교해 더해줬다.

CT(23).내적이라는 문제는 answer += a[i]*b[i]를 for문 돌려주면 되는 문제였다.

CT(24).문자열 내림차순으로 배치하기는 answer = s.split('').sort((a,b) => b.charCodeAt() - a.charCodeAt()).join('')로 해결했다.

CT(25).JadenCase 문자열 만들기는 split(' ')을 통해 공백으로 나눠준 후 길이가 2가 넘을 경우 idx 0은 toUpperCase, idx 1 이상은 toLowerCase로 처리했으며 길이가 1일 경우는 toUpperCase로 처리하고 공백인 경우 무시했다.

CT(26).문자열 다루기 기본은 좀 화가나는데 여러가지 방법으로 하다가 막혀서 map, filter, if문의 콜라보로 해결했다.
let arr = s.split('').map(Number).filter(el => !isNaN(el))
if(s.length === 4 && arr.length === 4){
        return true
    }
    
CT(27).이진 변환 반복하기는 조건이 조금 까다로운데 1111로 1만 남기는 것이라고 생각하고 풀었는데 알고보니 '1'으로 만들라는 말이었다.
while, (newArr.length).toString(2)를 사용하면 쉽게 해결할 수 있다.

CT(28).약수의 개수와 덧셈은 for문으로 약수를 arr에 push한 후 arr의 길이에 따라 answer에 값을 더하거나 뺴는 방식으로 해결할 수 있다.
약수를 모두 더하고 모두 뺴는 방식으로 해야 하는줄 알고 진행했다가 오답이 나와 당황했다..

'회고' 카테고리의 다른 글

[Main-Project 개발일지]-2(추석)  (1) 2022.09.09
[Main-Project 개발일지]-1  (0) 2022.09.08
[Pre-Project 개발일지]-13  (0) 2022.09.06
[Pre-Project 개발일지]-12  (1) 2022.09.05
[Pre-Project 개발일지]-11(주말)  (0) 2022.09.04

+ Recent posts