코딩테스트_JavaScript(2)

백세희·2024년 1월 14일
post-thumbnail

0. 들어가기 전

이번 주는 문제 분량을 늘리기로 했어요.
이번 주부터는 문제량이 많기 때문에 모든 코드를 velog에 적지 않을 생각이에 요.
대신! 진행사항 밑에 코드를 모아둔 github 주소를 남길겁니당!
🔥🔥🔥

1. 진행사항

백준 step2

  1. 1330 - 두 수 비교하기
    두 수를 비교한 결과를 출력하는 문제
  2. 9498 - 시험 성적
    시험 점수를 성적으로 바꾸는 문제
  3. 2753 - 윤년
    윤년을 판별하는 문제
  4. 14681 - 사분면 고르기
    점이 어느 사분면에 있는지 알아내는 문제
  5. 2884 - 알람 시계
    시간 계산 문제
  6. 2525 - 오븐 시계
    범위가 더 넓은 시간 계산 문제
  7. 2480 - 주사위 세개
    조건에 따라 상금을 계산하는 문제

백준 step3

  1. 2739 - 구구단
    구구단을 출력하는 문제
  2. 10950 - A+B - 3
    A+B를 여러 번 출력하는 문제
  3. 8393 - 합
    1부터 N까지의 합을 구하는 문제. 물론 반복문 없이 풀 수도 있습니다.
  4. 25304 - 영수증
    💸
  5. 25314 - 코딩은 체육과목 입니다
    코딩 공부를 잘 하여 이렇게 long long long long...을 칠판에 적는 일이 없도록 합시다.
  6. 15552 - 빠른 A+B
    빠르게 입력받고 출력하는 문제
  7. 11021 - A+B - 7
    A+B를 조금 더 아름답게 출력하는 문제
  8. 11022 - A+B - 8
    A+B를 바로 위 문제보다 아름답게 출력하는 문제
  9. 2438 - 별 찍기 - 1
    별을 찍는 문제 1
  10. 2439 - 별 찍기 - 2
    별을 찍는 문제 2
  11. 10952 - A+B -5
    0 0이 들어올 때까지 A+B를 출력하는 문제
  12. 10951 - A+B -4
    입력이 끝날 때까지 A+B를 출력하는 문제. EOF에 대해 알아 보세요.

문제 풀이 저장소

2. 배운점

  1. 입력값 쓰임에 따라 분리하여 사용하는 코드

저번 주 입력값 한 줄 + 띄어쓰기 구분이 메인

30 20

이번 주 입력값 여러 줄 + 줄마다 입력값 쓰임이 다름이 메인

백준 25304

260000
4
20000 5
30000 2
10000 6
5000 8
const fs = require("fs");
const input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const extendedPrice = parseInt(input[0]);
const numberOfTypes = parseInt(input[1]);
let resultPrice = 0;

for (let i = 2; i < numberOfTypes + 2; i++) {
  const valueAndQuantity = input[i].split(" ").map(Number);
  const value = valueAndQuantity[0];
  const quantity = valueAndQuantity[1];

  resultPrice += value * quantity;
}

if (extendedPrice == resultPrice) {
  console.log("Yes");
} else {
  console.log("No");
}
  1. 조건문 - 필요 없는 조건?
    조건문 조건의 최적을 찾지 못했다.
    이유 1. 들어 필요 없는 조건을 넣었다.
    이유 2. 조건에서 제일 중요하게 여겨야 하는 기둥을 찾지 못했다.
//	예시 1
//	백준 2480 
//  문제점: one, two, three가 같을 때의 조건문
if (one == two && one == three && two == three) {
  result = 10000 + one * 1000;
}
// 해결점: && 그리고를 이해해야 함
if (one == two && two == three) {
  result = 10000 + one * 1000;
}
//	예시 2
//	백준 2884
//  문제점: M이 45 기준으로 조건문을 분명하게 나누지 않아서 가독성이 떨어짐 
if (M < 45 && H == 0) {
  H = 23;
  M = M + 15;
} else if (M < 45) {
  H = H - 1;
  M = M + 15;
} else {
  M = M - 45;
}
//	해결점: M이 45미만일 때와 아닐 때로 크게 나눔 🌟핵심포인트!
//	스터디원이 달아준 코드리뷰 참고함
if (M < 45) {
  if (H == 0) {
    H = 23;
    M = M + 15;
  } else {
    H = H - 1;
    M = M + 15;
  }
} else {
  M = M - 45;
} 

3. 스터디원 코드 리뷰 후 배운 점

1. 변수에 값을 할당하고 사용할 때 혹은 값을 바로 사용할 때
스터디원은 변수에 담는 것보다 바로 console.log 출력문에 사용하는 걸 선호했음

일회적으로 사용하는 값은 코드 길이를 줄여 좋음

하지만, `여러 번 사용하는 값이나`, `의미 전달하는 값은` 
let, const 키워드를 사용해서 적절한 이름에 할당하는 것이 좋음
  1. 주어진 문제 표면에서 조건을 찾아서 해결할 수 있을 수 있지만,
    자바스크립트 문법을 이용한 조건으로 해결 가능
// 기존 코드
// 백준 10952
const fs = require("fs");
const input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");
let i = 0;

while (i >= 0) {
  if (input[i] == "0 0") {
    break;
  }
  const testCase = input[i].split(" ").map(Number);
  const A = testCase[0];
  const B = testCase[1];

  console.log(A + B);

  i++;
}
// 자바스크립트 length 활용
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let i = 0;

while (i < input.length - 1 ) {
    const testCase = input[i].split(" ").map(Number);
    const A = testCase[0];
    const B = testCase[1];
   
    console.log(A + B);
    i++
}

4. 느낀 점

🤓 자바스크립트 문제를 풀면서

저번 주보다는 난이도도 올라갔고 문제 수도 많다 보니 시간을 더 할애했다.
또 저번 주와 다른 점은 해결 방법이 다양할 수 있겠다라는 느낌을 받았다.
앞으로 자바스크립트 문법을 잘 활용하고 변수 이름을 적절하게 지어 가독성이 좋은 해결 코드를 작성하고 싶다.

🙋🏻‍♀️ 스터디원 코드 리뷰를 받으면서

조건문 활용해서 더 나은 방향을 제시해줘서 
원래 나는 풀면 넘기자 마인드가 강한데
더 나은 코드로 해결해야됨을 다시 자각했다. 감사합니당😊😊😊😊😊

🙋🏻‍♀️ 스터디원 코드 리뷰를 하면서

'이 값은 변수에 할당하면 더 좋을 것 같은데?' 
'이 출력문은 백틱을 활용하면 쉽게 될 것 같은데?'
라고 생각하는 저를 칭찬합니다! ㅎㅎㅋㅋㅋ 

5. week3의 계획

문제 수가 많아질수록 한 문제에 대한 애정과 집중이 사라지는 걸 느꼈다.
하지만, 어려운 문제들이 아니라 week3 문제 수를 늘리려고 한다!
백준 4, 5, 6 단계를 풀 것이다.

profile
프론트엔드

0개의 댓글