오늘은 원초적으로 돌아가 for문을 사용하는 연습을 했다.
내가 아는 for문의 형식은 이렇다.
for (let i = 0; i < parameter.legnth; i++) {
}
초기 설정과 조건식, 증감식 이렇게 구성되어있다는 건 알고 있었다. 그리고 프로그래머스 문제를 풀며 reduce를 통해 해결 하였는데
이 문제를 for문을 통해 풀려니 생각보다 시간이 엄청 걸렸다. 그 이유는 for문을 제대로 이해하지 못하고 reduce라는 함수를 외워서 썼다는 말 밖에 되지 않기 때문이다.. 이것도 사실 정답이다. 그래서 가장 기본적인 반복문의 for문을 연습하려고 코테문제와 비슷하게 연습을 했다. 조건은 아래와 같다.
fucntion prac(str) {
}
prac('4141321')
// prac이 가지고 있는 값들을 다 더해야한다 --> result : 16
우선 변수를 하나 만들어서 초기값을 만들어준다.
fucntion prac(str) {
let a = 0; // 초기값 설정을 한 변수 만들어줌
for(let i = 0; i < str.legnth; i++) {
a += str[i]
}
}
prac('4141321')
이게 기존의 내가 알고 있던 for문의 사용방식이였다. i를 0으로 설정하고 i를 str이 가지고 있는 길이 만큼 증감시키고 난 뒤, 그 길이보다 커지면 for문이 종료되도록 하였다. 여기까지 완벽하다고 생각했는데 콘솔을 찍어본 결과 04141321 이렇게 나왔다.
내가 생각한 결과값과는 달라서 뭐가 문제지 하면서 최소 2시간 이상 삽질을 했던 것 같다.
이번에 연습을 하면서 한 가지 약속한게 " 그 어떠한 검색, 도움, gpt 등의 도움을 받지않고 스스로 생각하여 해결하는 것" 이였기에 생각보다 시간이 너무 오래 걸렸다.
수 많은 시간동안 삽질한 결과 정답은 엄청 가까이 있었고, 심지어 내가 타입스크립트를 하면서 알고 있던 문제였다. 이 문제를 해결하고나서 자괴감이 들었다..그래서 잊지않고 다음에도 이런 상황이 있었을 때 오늘을 기억하기 위해 TIL식으로 글을 남기려고 한다.
04141321 이렇게 나왔던 이유는...
function prac(str) {
let a = 0; // <-- 0은 현재 number로 할당되어있다.
for(let i = 0; i < str.legnth; i++) {
a += str[i]
console.log(typeof str[i]) // <-- 타입을 확인해보면 string 으로 되어있다.
}
}
prac('4141321')
a에는 0 이라는 number 값이 할당되어 있고, str[i]의 타입에는 string 으로 되어있다. 당연히 숫자와 문자열을 더하면 그 값이 더해지는게 아니고 붙여지는거기 때문에 " 04141321 " 이렇게 나왔던 것이다. 수 많은 시행착오 끝에 이렇게 해결하니 사실 기분이 좋은 것 보다 내 자신을 질책하게 됐던 것 같다...
그래서 for문 안에 Number타입으로 str[i]를 감싸고 더해지니 원하는 16 의 값을 가지고 올 수 있었다.
느낀 점은 어떤 배열메소드든 뭐든 기본에 충실해야하고 기본을 잘 다뤄야 파생되는 것들의 흐름을 볼 수 있게 되는 것 같다.
아래에는 고생의 흔적...
'리액트' 카테고리의 다른 글
Promise에 대해 (1) | 2024.12.09 |
---|---|
Math.min / max (0) | 2024.12.08 |
공부일지 : 배열 함수(map,filter,some,every,find) (0) | 2024.12.07 |
String.legnth 에 대하여 (0) | 2024.11.26 |
React find Method (0) | 2024.11.25 |