20151018


*이문제는 % 연산자와 / 연산자를 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




초 변환/sec


프로그램 명: sec(open)

제한시간: 1 초

초(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시간 이런식으로 범위가 넘어가게 된다.







+ Recent posts