티스토리 뷰

TIL

TIL 220724 백준 step2

2021bong 2022. 7. 25. 00:48

백준 step2 조건문

1330

숫자로 변환하는 것을 잊지말자!

간단한 문젠데 또 형변환을 잊어서 틀렸다가 맞췄다.

 

2753

문제를 잘 읽자!

윤년을 구하는 문제였는데 문제를 잘 이해하지 못해서 조건문을 이리저리 수정한 것도 있는데,

가장 중요한 출력 값을 멋대로 1, 2로 적어놓고는 몰라서 7번은 틀렸다... 문제를 잘 읽고 오답이 낫을 땐 코드 전체를 살펴보자 제발!

 

14681

node.js로 문제를 푼다면 이 문제는 readline으로만 풀 수 있습니다.

그동안 나는 문제를 fs모듈로 풀고 있었는데 자꾸 런타임에러가 나서 찾아보니 이 문제는 fs모듈로는 에러가 나서 readline으로만 풀 수 있다고 한다. 그런데 왜 어찌하여 문제에는 이걸 적어주지 않으셨나요 백준 관리자님들... 전 그것도 모르고 하염없이 스스로를 원망했답니다..... readline으로 푸는 법을 찾아서 어찌저찌 풀었다. 그런데 코드 위치가 달라지면 채점이 다르게 되던데 다음에 다시 찾아서 이해할 수 있도록 공부해야겠다. 또 vscode에서 fs모듈을 npm으로 설치해서 txt파일로 푸는 법도 있던데 같이 알아봐야겠다.

 

2884, 2525

예외적인 모든 상황에 대응해 줄 것!

시간과 관련된 문제에서 포인트는 60분이 되었을 때 0분과 시간을 올려주는 것, 24시가 되었을 때 0시 처리인 것 같다.

2884 문제에서는 발생하는 모든 경우를 else if로도 다 대응했다고 생각했는데 대응되지 않은 경우가 있었는지 10번은 틀린 뒤 else로 고치고 나서야 맞았다.

// no.2884
var fs = require("fs");
var input = fs.readFileSync("/dev/stdin").toString().split(' ');
let time = +input[0];
let min = +input[1];
if (min - 45 < 0) {
  if (time === 0) {
    time = 24;
  }
  time -= 1;
  min = 60 + min - 45;
} else { // else if로 했더니 오답이 났다.
  min -= 45;
}
console.log(`${time} ${min}`);

 

2525 문제는 시간을 더하는 문제여서 시(hour)가 엄청 커질 수 있다는 생각을 못해서 여러번 틀렸다. 

// no.2525
var fs = require("fs");
var input = fs.readFileSync("/dev/stdin").toString().split("\n");
let taketime = +input[1];
let hour = Number(input[0].split(" ")[0]);
let min = Number(input[0].split(" ")[1]);
if (min + taketime >= 60) {
  let takehours = Math.floor((min + taketime) / 60);
  let takemins = (min + taketime) % 60;
  hour += takehours;
  min = takemins;
  if (hour >= 24) { // taketime이 아주 커서 24시를 넘을 수 있다는 생각을 못했다.
    hour = Math.floor(hour % 24);
  }
} else {
  min = min + taketime;
}
console.log(`${hour} ${min}`);

 

스스로 생각하기에 경우마다 조건문을 적어서 다 대응했다고 생각했는데 생각치도 못한 경우 때문에 오답으로 골머리를 앓았다. 결국 솔루션을 검색하다가 경우별 조건문으로 대응하는 것보다는 근본적으로 계산하는 것이 더 효율적인 코드라고 생각하게 되었다.

// https://velog.io/@fdongfdong/%EB%B0%B1%EC%A4%80-2525%EB%B2%88-%EC%98%A4%EB%B8%90%EC%8B%9C%EA%B3%84-Node-JS
var fs = require('fs');
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');

let a = parseInt(input[0].split(' ')[0]);
let b = parseInt(input[0].split(' ')[1]);
let c = parseInt(input[1]);

let h = 0;
let m = 0;

h = Math.floor((a * 60 + b + c) / 60);
m = (a * 60 + b + c) % 60;
if (h >= 24) {
  h -= 24;
}
console.log(`${h} ${m}`);
// https://ryan-kim-dev.tistory.com/29?category=925769
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
input = input.toString().split(',');
const currentTime = input[0].split(' ').map((item) => +item);
const cookingTime = Number(input[1]);
function solution(H, M, C) {
  M += C;
  if (M >= 60) {
    H += Math.floor(M / 60);
    M %= 60;
  }
  if (H > 23) {
    H -= 24;
  }
  console.log(H, M);
}
solution(currentTime[0], currentTime[1], cookingTime);

 

step2 조건문이 7문제밖에 안돼서 1시간 30분이면 풀겠지하고 생각했는데 반 이상을 기본 7번은 틀렸고 다 푸는데 3시간이 걸렸다. 알고리즘이란 이런 것인가 싶으면서 쓴 맛을 느꼈지만 짧은 코드로 문제를 해결한 다른 사람들의 코드를 보면서 열심히 해야겠다는 의지가 생겼다. 또 틀려서 봉또틀이 되고 또 틀려서 짜증나서 울고 싶어도 계속 하다보면 사고력이 늘겠지 생각하면서 열심히 풀어야겠다. 나는 끝까지 살아남을거야!!! \(`0')/ 화이팅!

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함