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;
}

오늘도 많이 배웠다 보람찬 하루였다!

좋은 웹페이지 즐겨찾기