알고리즘 - [백준] 2884번

Seong Hyeon Kim·2022년 8월 13일
0

알고리즘

목록 보기
13/20
post-thumbnail

단계별 문제풀이 중 정답률이 가장 적은 알람시계 문제이다

내가 정한 시간보다 45분 일찍 알람이 울려야되니깐

입력 시간보다 45분 전으로 나오게끔 출력이 나오면 되는 문제엿고,

const fs = require("fs");
const [h,m] = fs
  .readFileSync("input.txt")
  .toString()
  .trim()
  .split(" ")
  .map(Number);


    if(h>=1&&m<45) {
        let resultA = h-1; 
        let resultB = m+15;
        console.log(`${resultA} `+`${resultB}`) 
    }else if(h==0&&m>45){
        let resultC = 23;
        let resultD = m+15; 
        console.log(`${resultC} `+`${resultD}`)
    }

우선 시간 말고 분에서 45분을 빼주는 형태보다는

먄약 시간이 바뀔꺼라면 그냥 시간에서 1을 빼주고 분에서는 45분뒤는 그냥 15분 더한것과

같은 값이라서 위 코드와 같이 작성을 하였다.

문제는 저렇게 하면 다음과 같은 오류가 발생하는데

첫번재 사진만 보면 문제없이 코드가 잘 돌아가는것을 보이지만

두번째 사진을 보면 0시 30분인 경우는 아예 찍히지도 않으며,

스터디 이후 알게 된 새로운 예시로
0시 50 분으로 해버리면 23시 65분이라는 말도 안되는 수치가 나오게 된다.

예외 처리 부분이 조금 부실하다고 생각되어서 우선 이부분을 먼저 고치기로 했다.



const fs = require("fs");
const [h,m] = fs
  .readFileSync("input.txt")
  .toString()
  .trim()
  .split(" ")
  .map(Number);


    if(h>0&&m<45) {
        let resultA = h-1; 
        let resultB = m+15;
        console.log(`${resultA} `+`${resultB}`) 
    }else if(h==0&&m<45){
        let resultC = 23;
        let resultD = m+15; 
        console.log(`${resultC} `+`${resultD}`)
    }else if(h==0&&m>45){
        let resultE = 23
        let resultF = m-45
        console.log(`${resultE} `+`${resultF}`)
    }

스티디에서 나온 피드백대로 45분 보다 큰 상황에서의 예외처리도 완료해서 무사히 잘 실행되는것도 확인할 수 있었다.



추가로 같이 한 팀원의 코드중 좀더 짧은 내용을 말하자면

  let input = require('fs') .readFileSync('dev.stdin').split(" ").map(Number);
  
    let h = Number(input([0]));
    let m = Number(input([1]));

    if(m>=45){
        m = m-45
    }else{
        h --
        m = 60- (45-m)
        
        if(h<0){
            h=23
        }
    }
    console.log(h + ' ' + m)

이러한 형태로 작성하면 더 깔끔하게 할 수 있다.
if else 문 안에서 if 문을 한번 더 사용하는거는 생각도 못했고, 변수 h m 을 미리 바깥에서 선언해놓으면 코드가 좀더 간결해질수 있다는것도 알게 된것 같다.

profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글