TIL_21.11.08
알고리즘 기초 주차 시작
오늘은 1번 부터 8번 까지 8개의 문제를 풀었다
✨직사가형 별찍기
console.log('⭐⭐⭐⭐⭐');
console.log('⭐⭐⭐⭐⭐');
console.log('⭐⭐⭐⭐⭐');
이렇게 하면 끝인데.... 안되겠지요?
// 첫 화면
// 표준입력으로 받은 데이터를 utf8로 인코딩 하겠다
process.stdin.setEncoding('utf8');
// 인코딩 한 애를 데이터로 넘겨 주겠다
process.stdin.on('data', data => {
// 가져 온 데이터를 쪼갠다
const n = data.split(' ');
//쪼갠 애들을 변수에 담는다
const a = Number(n[0]), b = Number(n[1]);
console.log(a);
console.log(b);
});
문제를 풀어보자
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(' ');
const a = Number(n[0]), b = Number(n[1]);
// 1. 별을 이어붙이자
let stars = '⭐'.repeat(a)
// '⭐⭐⭐⭐⭐'
// 2. 이걸 for문으로 돌리자
for(let i =0; i < b; i++){
console.log(stars)
}
});
// '⭐⭐⭐⭐⭐'
// '⭐⭐⭐⭐⭐'
// '⭐⭐⭐⭐⭐'
✨짝수와 홀수
짝수랑 홀수 구할 때는 !?!?!?!?
값 % 2 === 0
function solution(num){
let answer = '';
if(num % 2 === 0) {
answer = 'Even';
}else {
answer = 'Odd';
}
return answer;
}
내가 좋아하는 삼항연산자를 사용 할 수도 있다
function solution(num){
return num % 2 === 0 ? 'Even':'Odd';
// num을 2로 나눈 나머지가 0이야?
// true면 'Even' 리턴하고
// flase면 'Odd' 리턴
}
나도 많을 걸 배워서 더 간결하고 멋있는 코드를 짜고 싶다👍
✨가운데 글자 가져오기
일단 자바스크립트 문자열 메소드 검색
charAt(index): 주어진 문자열의 index 위치의 문자열을 반환
substing(from, to): 첫 번째 인자부터 두 번째 인자 까지의 index에 해당하는 문자열을 반환
'안녕하세요'.charAt(3);
// '세'
'hello world'.substing(1, 10);
// 'ello worl'
처음에 주어지는 값이 일정할 것 이라고 착각하고 짠 코드
function solution(s) {
let answer = ''
if (s.length % 2 === 0) {
answer = s.substring(1,3);
}else {
answer = s.charAt(2);
}
return answer;
}
// 성공은 했지만 성공이 아니다!
어떤한 값이 와도 실행이 될 수 있도록 만들어보자
처음에는 substring을 썼지만 너무 복잡해 보여서 substr로 변경
function solution(s) {
let answer = '';
if(s.length % 2 === 0){
// answer = s.substr(s.length/2-1, s.length/2+1);
answer = s.substr(s.length/2-1, 2);
return answer;
}else{
// answer =
// s.substring(Math.floor(s.length / 2), Math.floor(s.length / 2)-1);
answer = s.substr(Math.floor(s.length/2), 1)
return answer;
}
}
substring과 substr은 다르다
'안녕하세요'.substring(1,2);
// '녕', (from, to)
'안녕하세요'.substr(1,2);
// '녕하', (start, length)
✨두 정수 사이의 합
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴한다
a가 클수도 있고, b가 클수도 있고, 두 수가 같을 수도 있다
function solution(a, b) {
let min = Math.min(a, b);
let max = Math.max(a, b);
let answer = 0;
for (let i = min; i <= max; i++){
answer += i
}
return answer;
}
// 수가 같을 땐 min과 max에 어떤 값이 들어가도 상관없다
✨문자열을 정수로 바꾸기
엄청 쉽쥬
function solution(s){
return +s;
// return Number(s);
// return parseInt(s);
// return s * 1;
}
✨없는 숫자 더하기
차집합 구하기!
function solution(numbers) {
let result = 0;
for (let i = 1; i < 10; i++) {
if(!numbers.includes(i)){
result += i
}
}
return result
}
// 예전에 배운 includes가 생각나서 다행이였던 문제다
✨음양 더하기
제한사항
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미
풀이과정
1. absolutes.legth 만큼 for문을 돌린다
2. for문을 돌면서 signs[i]의 양수, 음수를 판단
3. if문 사용해서 signs[i] 가 거짓일 때, absolutes[i]의 값에 마이너스 주기
4. 나온 값들을 reduce를 사용해 다 더해주기
배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값);
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
console.log(accumulator, currentValue, currentIndex, array)
return accumulator + currentValue;
});
// 0 1 1 (5) [0, 1, 2, 3, 4]
// 2 1 2 2 (5) [0, 1, 2, 3, 4]
// 2 3 3 3 (5) [0, 1, 2, 3, 4]
// 2 6 4 4 (5) [0, 1, 2, 3, 4]
// 10
// 초깃값 있을 때
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
console.log(accumulator, currentValue, currentIndex, array)
return accumulator + currentValue;
}, 10);
// 10 0 0 (5) [0, 1, 2, 3, 4]
// 2 10 1 1 (5) [0, 1, 2, 3, 4]
// 2 11 2 2 (5) [0, 1, 2, 3, 4]
// 2 13 3 3 (5) [0, 1, 2, 3, 4]
// 2 16 4 4 (5) [0, 1, 2, 3, 4]
// 20
자 이제 문제를 풀어보자
function solution(absolutes, signs) {
for(let i = 0; i<absolutes.length; i++){
if(signs[i] === false){
absolutes[i] = -absolutes[i]
} else {
absolutes[i]
}
} return absolutes.reduce(function(acc,cur){
return acc+cur
})
}
좋아요 많이 받은 풀이
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
✨평균 구하기
학생 때 많이 한 평균 구하기!
모든 과목 점수 더하고 나누기 더한 과목의 수
function solution(arr) {
let answer = 0;
for(let i = 0; i < arr.length; i++){
answer += arr[i]
}
return answer / arr.length;
}
// 여기서도 reduce를 사용할 수 있다!
function average(array){
return array.reduce((a, b) => a + b) / array.length;
}
오늘도 많이 배웠다 보람찬 하루였다!
Author And Source
이 문제에 관하여(TIL_21.11.08), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hamkke/TIL211108저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)