20151018
*이문제는 % 연산자와 / 연산자를 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.
초 변환/sec
프로그램 명: sec(open)
초(second)가 입력으로 주어진다.
이 를 몇 날 몇 시간 몇 분 몇 초 인지를 변경하는 프로그램을 작성하시오.
입력
초(second)가 입력으로 주어진다. 10 000 000 이하의 정수 이다.
출력
4 개의 정수를 출력한다.
날 시 분 초
입출력 예
입력 70 출력 0 0 1 10
문제 풀이
풀이1)
import java.io.PrintStream; import java.util.Scanner; public class Main { Scanner sc = new Scanner(System.in); PrintStream p = System.out; long temp; public static void main(String[] args) { Main ma = new Main(); ma.input(); ma.result(); } void input(){ temp = sc.nextLong(); } void result(){ long day = temp/(60*60*24); long time = (temp%(60*60*24))/(60*60); long minute = (temp%(60*60))/(60); long second = temp%(60); System.out.println(day+ " " + time + " " + minute + " " +second); } }
풀이2)
import java.io.PrintStream; import java.util.Scanner; public class Main { Scanner sc = new Scanner(System.in); PrintStream p = System.out; int temp, second, minute, time, day; public static void main(String[] args) { Main ma = new Main(); ma.input(); ma.result(); } void input(){ temp = sc.nextInt(); } void result(){ minute = temp/60; time = minute/60; day = time/24; System.out.println(day+ " " + time%24 + " " + minute%60 + " " +temp%60); } }
이번 문제는 어려운건 아니지만 생각하는 시간이 좀 걸렸네요. 우선 나름 직관적인 코딩을 하겠다고 초, 분, 시간, 하루 를 구분하겠다고 일부러 저렇게 60(분) 60*60(시간) 60*60*24(하루) 이런식으로 구현했습니다. 초부터 거꾸로 설명을 하자면
초는 60초 1분으로 나머지 연산을 하면 쉽게 구 할 수 있습니다.
분은 60*60 1시간으로 나머지 연산을 한 값에 1분 으로 몫을 구했습니다.
시간은 60*60*24 하루로 나머지 연산을 한 값에 60*60 1시간으로 몫을 구했습니다.
날 은 가장 큰 범위 이기 때문에 바로 60*60*24 하루 단위로 몫을 구해주면 됩니다.
시간, 분, 초 단위에 나머지 연산을 한 이유는 각 범위 값을 넘어가는 수를 버리기 위해서 였습니다.
분 단위를 구하기 위해서는 날(day) 보다 작은 범위 24시간 아래 값이 남아야 하기 때문에 24시간이 넘는 범위를 버리기 위해서 였습니다.
예) 하루는 24시간인데 범위 값을 버리지 않고 그냥 temp%(60*60) 을 하면 29시간, 400시간 이런식으로 범위가 넘어가게 된다.
'알고리즘(dovelet 문제풀이) > 1층' 카테고리의 다른 글
인공지능 시계/koi_watch(인공지능 시계 알고리즘) (0) | 2015.10.19 |
---|---|
세자리수 곱셈/three(세자리수 곱셈 알고리즘) (0) | 2015.10.19 |
거스름 돈/change(거스름 돈 알고리즘) (0) | 2015.10.19 |
몫과 나머지 구하기/q_r (몫과 나머지 구하기 알고리즘) (0) | 2015.10.19 |
섭씨온도를 화씨온도로 변환/CtoF(섭씨온도를 화씨 온도로 변환 알고리즘) (0) | 2015.10.19 |