알고리즘의 매력을 알게 해주던 한주였고 어떻게 지나갔는지도 모르게
몰입을 했던 것 같고 많은것을 알게 된거 같지만 왠지모르게 남은게 없는거같은
이상한 기분이 들었었다
알고리즘 주차에 맞게 다른팀원들과 가볍게 인사를 하고 비록 첫시작이지만
달리기반으로 선택하고 배정받은 만큼 미친듯이 달려보자라는 각오로
달리기반 첫문제보고 바로 뒤로가기버튼 누르고 예제로 나와있는 별찍기부터
어떻게 돌아가는 메커니즘인지 공부를 한뒤 걷기반 첫문제 부터 시작했다.
별 하나 씩 추가
let output = ''
for (let i = 0; i < 9; i++){
for (let j = 0; j < i + 1; j++){
output += '*'
}
output += '\n'
}
console.log(output)
홀수마다 별 추가
let output = ''
for (let i = 0; i < 9; i++){
for (let j = 0; j < (2 * i + 1); j++){
output += '*'
}
output += '\n'
}
console.log(output)
피라미드 만들기
let output = ''
for (let i = 0; i < 9; i++){
for (let k = 0; k < 8 - i; k++){
output += ' '
}
for (let j = 0; j < (2 * i + 1); j++){
output += '*'
}
output += '\n'
}
console.log(output)
마름모
let output = ''
for (let i = 0; i < 9; i++){
for (let k = 0; k < 9 - i; k++) {
output += ' '
}
for (let j = 0; j < (2 * i + 1); j++) {
output += '*'
}
output += '\n'
}
for (let i = 0; i < 10; i++) {
for (let k = 0; k < i; k++){
output += ' '
}
for (let j = 0; j < 2 * (9 - i) + 1; j++){
output += '*'
}
output += '\n'
}
console.log(output)
분석 예제
let output = ''
for (let i = 0; i < 9; i++){
for (let j = 0; j < i + 1; j++){
output += '*'
}
output += '\n'
}
// 패턴
for (let i = 0; i < n; i++{ }
-> 반복문 내부를 n번 반복!
// 실행
output = ''
i = 0
for (let j = 0; j < i + 1; j++) { } // 1번 반복
output = '*'
output = '*\n'
i = 1
for (let j = 0; j < i + 1; j++) { } // 2번 반복
output = '*\n*'
output = '*\n**'
output = '*\n**\n'
i = 2
for (let j = 0; j < i + 1; j++) { } // 3번 반복
output = '*\n**\n*'
output = '*\n**\n**'
output = '*\n**\n***'
output = '*\n**\n***\n'
i = 3
for (let j = 0; j < i + 1; j++) { } // 4번 반복
output = '*\n**\n***\n*'
output = '*\n**\n***\n**'
output = '*\n**\n***\n***'
output = '*\n**\n***\n****'
output = '*\n**\n***\n****\n'
i = 4
for (let j = 0; j < i + 1; j++) { } // 5번 반복
output = '*\n**\n***\n****\n*'
output = '*\n**\n***\n****\n**'
output = '*\n**\n***\n****\n***'
output = '*\n**\n***\n****\n****'
output = '*\n**\n***\n****\n*****'
output = '*\n**\n***\n****\n*****\n'
// 직사각형 별찍기
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
for (let i = 0; i < b; i++){
for ( let j = 0; j < a; j++){
star += '*'
}
star += '\n'
}
console.log(star)
});
결국 열심히 한 끝에는 달리기반 문제중에서도 혼자 간단히 풀게되는 문제들이
간간히 나올정로도 응용력이 좋아진거 같다. (팀원분들의 엄청난 관심과 사랑 덕분인지도..)
그렇지만 아직 while문이나 switch문, map을 비롯한여러 메소드들을 좀더 활용하지 못하고
수학공식이 필요한 문제를 못풀거나 못풀거나 못풀어서 너무 아쉬웠다.
(그래서 한주가 너무 짧게 느껴졌을지도...)
주특기 주차에 들어서서 알고리즘주차때 성급하게 보느라 놓쳤던
ES6의 새로운 기능들과 (몇가지는 이미 알고 있었지만)
Node.js, express, mongoose 등등 백엔드 관련 문법들을 배우는데
이번 WIL의 키워드인 ES5와 ES6를 보다보니 정말 모르고 쓰고있던 부분들도 있었고
응용해서 쓰면 좋을거같은 기능들이 정말 많았다.
우선 ES는 대충 ECMA가 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 뜻하고
ES5에서 ES6로 패치되면서 새로생긴 점들은
- 템플릿 리터럴 - (``)
- 화살표 함수 - ( let str = arg1 => console.log(arg1) )
- this
- 변수 선언 - var => let, const
- 모듈 - require => import / export
- 클래스와 클래스의 상속
- 객체 구조 분해 할당 등등.. (따로 정리해둔 포스팅)
여기까지만 보는데도 우와.. 했으니 공식문서를 본다면 얼마나 좋을까란 생각을
잠시 찰나 사소하게 해보았다.
한 주간 아쉬웠던 점
- 기초를 다지는 시간에 시간이 부족하다고 하여 성급하게 넘겨 많은것을 놓침
- 내방식으로 풀어보고 다른사람의 풀이를 참고하여 '이렇게 풀 수도 있구나' 하는것도 좋지만
- 내방식으로 풀어보는 시간에 너무 많이 투자함.
- + 다른사람의 풀이를 보고 이해하는 시간까지 되니 시간이 부족했을 수 밖에
- 아직 이해도가 부족한 콜백, 프로토타입, 비동기 함수 등등 보일때마다 바로
- 쓰는 방법이 안나오면 찾아봐야겠다.
한주를 보내고 남은 것
https://github.com/JangKroed/Algorithm_Prac
GitHub - JangKroed/Algorithm_Prac
Contribute to JangKroed/Algorithm_Prac development by creating an account on GitHub.
github.com