20151020


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





손해 본 금액/business




프로그램 명: business

제한시간: 1 초


4 개의 정수가 입력으로 주어진다.

40 70 50 20

차례대로

  • 원가 -- 40
  • 정가(판매가) -- 70
  • 손님이 물건값으로 지불한 돈 중 가짜 돈 -- 50
  • 주인이 손님에게 거스름돈으로 지불한 돈 -- 20

문제의 내용은

  • 정가가 70 원 인데 , 주인이 손님에게 거슬러 준 돈이 20 원 이므로 손님이 주인에게 지불한 금액은 90 원으로 유추 할 수 있다.
  • 이 중 50 원이 가짜 돈이므로 진짜 돈은 40 원 이다.
  • 즉 주인이 받는 진짜 금액이 40 원에서 주인이 거슬러 준 돈이 20 원 이므로 실제적으로 주인이 받은 금액은 20 원.
  • 그런데 원가가 40 원이므로 주인은 20 원의 손해를 본 것이다.

입력

4 개의 정수 값 N , M , P , C 가 입력으로 주어진다. 각각은 0 에서 500000 사이다.

  • 원가
  • 정가
  • 위조 지폐 금액
  • 거스름돈

N < M 이고 P <= M + C . 즉 C 를 보면 손님이 지불한 금액을 알수 있고 그 중 P 원이 위조 지폐이다. 물론 지불한 돈 모두가 위조 지폐일 수가 있다.

예를 들어

40 70 100 30

원가가 40 원이고 정가가 70 원인 물건을 거스름돈 30 원을 주었으니 손님이 지불한 금액은 100 원이고 이 돈 모두 위조 금액이다.

출력

주인이 (손해를 본 경우에는 양수 , 손해도 이익도 아니면 0 , 이익을 본 경우는 음수) 금액을 출력한다.

  • 70원을 손해 보았을 경우 -> 출력값 : 70
  • 손해도 이익도 아닐 경우 -> 출력값 : 0
  • 60원을 이익 보았을 경우 -> 출력값 : -60

입출력 예

입력

40 70 100 30
 
출력

70

입력

40 70 50 20

출력

20

입력

14604 32391 3902 153

출력

-13885
출처:POJ Monthly--2005.07.31, Wang Yijie



문제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);
	PrintStream p = System.out;
	int orimoney, sellmoney, fmoney, rmoney;

	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();
	    ma.result();
	}
	void input(){
		orimoney = sc.nextInt();   //원가
		sellmoney = sc.nextInt(); //정가
		fmoney = sc.nextInt();    //손님이 물건값으로 지불한 돈 중 가짜 돈
		rmoney = sc.nextInt();    //주인이 손님에게 거스름돈으로 지불한 돈
	}
	void result(){
		p.println(orimoney-(sellmoney-fmoney));
	}
}






*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.

우선 4개 의 자연수 값을 입력 받기 위해서 orimoney(원가), sellmoney(정가), fmoney(가짜 돈), rmoney(거스름 돈) 변수 4개를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 result()함수에서

손님이 준 총 금액은 정가 + 거스름 돈 입니다.


 sellmoney + rmoney

손님이 준 총 금액에서 가짜 돈을 뺀 값이 주인이 받은 진짜 돈이죠

(sellmoney + rmoney)-fmoney

주인은 이 돈을 받고 거스름 돈을 줬으니 거스름 돈을 빼줍니다.

((sellmoney + rmoney)-fmoney)-rmoney

손님에게 거스름 돈과 가짜 돈을 뺀 값에서 원가를 빼면 이익과 손해를 알 수 있습니다. 

(((sellmoney + rmoney)-fmoney-)-rmoney)-orimoney

수식만 남은 상황에서 보니 거스름 돈은 더 했다가 빼주기 때문에 0이 되겠죠 그래서 수식에서 지워 줍니다. 

 (sellmoney -fmoney)-orimoney



출력 값을 보시면 손해인 경우 양수로 나와야 하기 때문에 원가에서 남은 돈을 빼줘야 양수가 나오게 됩니다. (그냥 위의 식에서 나온 값에 -1 을 곱해줘도 됩니다.)

*거스름 돈이 조금 혼란 스럽게 했던 문제였습니다.






20151019


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





인공지능 시계/koi_watch




프로그램 명: koi_watch

제한시간: 1 초


KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 초 단위로 자동적으로 계산한다.

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 초 단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

입력

  • 첫 째 줄에는 현재 시각이 나온다.
    • 시 A (0 <= A <= 23)
    • 분 B ( 0 <= B <= 59)
    • 초 C ( 0 <= C <= 59)
  • 두 번째 줄에는 요리하는 데 필요한 시간 D ( 0 <= D <= 500 000)가 초 단위로 주어진다.

출력

첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0분 0초가 된다.)

입출력 예

입력 

14 30 0
200

출력 

14 33 20

입력 

17 40 45
6015

출력 

19 21 0

입력 

23 48 59
2515

출력 

0 30 54
출처:2012 지역 본선 중등 1/5




문제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);
	PrintStream p = System.out;
	int hour, minute, second, sec;
	
	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();
	    ma.result();
	}
	void input(){
		hour = sc.nextInt();
		minute = sc.nextInt();
		second = sc.nextInt();
		sec = sc.nextInt();
	}
	void result(){
		minute = minute + hour*60;
		second = second + minute*60;
		sec = sec + second;
		
		second = sec%60;
		minute = sec/60;
		hour = minute/60;
		
		p.println(hour%24 + " " + minute%60 + " " + second);
	}
}





*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.

우선 4개 의 자연수 값을 입력 받기 위해서 hour, minute, second, sec 변수 4개를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 result()함수에서 시간 값을 분으로 바꿔 입력 받았던 분 값과 더 해 줍니다. 그리고 분값을 초 단위로 바꿔 입력 받았던 초 단위 값과 더 해 줍니다. 1번째 줄에서 입력 받은 시간을 초로 바꿔 준 것이 되겠죠? 그럼 2번째 입력받은 초단위 값과 더해주고 두 값을 더한 초단위 값을 다시 시, 분, 초 로 나눠주는 코딩입니다.


// 전 이제 이런 문제를 풀어보는데 이게 중등 문제 였다니 .. 슬퍼지네요ㅠ













20151019


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





세 자리수 곱셈/three


프로그램 명: three
제한시간: 1 초
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
   472…… (1)
 ×385…… (2)
---------------
  2360…… (3)
 3776 …… (4)
1416  …… (5)
--------------
181720…… (6)

(1)과 (2) 위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6) 위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세 자리 자연수가 주어진다.

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

입출력 예

입력

472
385

출력

2360
3776
1416
181720
출처:koi 초등 지역본선 2 번


문제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);
	PrintStream p = System.out;
	int temp, temp1, one, two, three;
	
	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();
	    ma.result();
	}
	void input(){
		temp = sc.nextInt();
		temp1 = sc.nextInt();
		
	}
	void result(){
		one = temp1%10;
		two = (temp1%100)/10;
		three = temp1/100;
		one = one*temp;
		two = two*temp;
		three = three*temp;
		
		p.println(one);
		p.println(two);
		p.println(three);
		p.println(one + two*10 + three*100);
	}
}





*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.

우선 2개의 자연수 값을 입력 받기 위해서 temp,temp1 변수 2개를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 result()함수에서 입력받은 temp1 을 1 의 자리, 10의 자리, 100의 자리 숫자를 가려내기 위해서

몫과 나머지 연산을 사용 합니다. 그럼 다음 각 자리수를 temp 에 각각 곱해주고 자리수를 맞추기 위해

 10의 자리는 10을 곱하고 100의 자리는 100을 곱한 뒤 더해주면 됩니다. 


*자바에서 나머지 연산을 사용하지 않고 temp1 에서 toStirng() , toCharArray() 를 사용해서도 자릿값을 가져올 수도 있습니다.











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







20151018


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




거스름 돈/change



프로그램 명: change
제한시간: 1 초
상점에서 물건을 사고 지폐로 돈을 내면 거스름 돈을 줘야 한다. 이 때 동전을 어떻게 해서 줘야 하는지 계산하시오.

돈은 반드시 1000 원을 내며 , 거스름 돈은 10 원 , 50 원 , 100 원 동전으로 하고 큰 동전 우선으로 준다.

입력

물건 값으로 세자리 자연수가 입력으로 주어진다. 일의 자리는 0 이다.

출력

동전 100 원 , 50 원 , 10 원의 개수를 출력한다.

입출력 예

입력

530

출력

4 1 2





문제 풀이



import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);        
	PrintStream p = System.out;
	int a;
	
	
	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();  
	    ma.result();
	}
	
	void input(){
		a = sc.nextInt();
	}
	void result(){
		int result = 1000 - a;
		int hund = result/100;
		int fif = (result%100)/50;
		int ten = (result%50)/10;
		p.print(hund + " " + fif + " " + ten);
	}
}


우선 3자리수 자연수 1개를 입력 받아야 하기 때문에 변수 a 를 선언과 값을 직접 입력 받아야 하기 때문에 Scanner 객체를 만들고 정수형 값을 입력 NextInt(); 를 사용해서 변수에  물건 값을 입력 받습니다.(정수 값으로 하기 위해서 int 를 사용 했습니다.)

그런 다음 1000원에서 3자리수 물건 값을 빼면 3자리수 잔돈이 남겠죠 제일 큰 수인 100원의 개수를 구하기 위해서는 100으로 나눈 몫이 100원의 개수가 됩니다.

50원의 개수는 100으로 % 연산자를 하면 100원을 제외한 나머지 잔돈의 금액이 나옵니다. 그런 그값에 /50 연산을 해줘서 50원 개수의 몫을 구합니다.

10원의 개수는 잔돈에서 100으로 % 연산자를 하고 50으로 %연산자를 한 나머지 값이나 50으로 %연산자를 한 나머지 값과 같습니다. 그래서 잔돈에 % 50 연산을 하고 /10 연산을 해서 10원의 몫을 구하면 10원의 개수가 됩니다.  










20151019


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




몫과 나머지 구하기/q_r



프로그램 명: q_r
제한시간: 1 초
두 자연수를 입력으로 받아 첫 번째 수를 두 번째 수로 나눈 몫과 나머지를 구하는 프로그램을 작성하세요.

입력

두 자연수가 입력으로 주어진다. 두 수는 10000 이하의 자연수이다.

출력

몫 과 나머지를 출력한다.

입출력 예

입력

8 5

출력

1 3




문제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);        
	PrintStream p = System.out;
	int a;
	int b;
	
	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();  
	    ma.result();
	}
	
	void input(){
		a = sc.nextInt();
		b = sc.nextInt();
	}
	void result(){
		int result = a/b;
		int rest = a%b;
		p.print(result + " " + rest);
	}
}





*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.

우선 2개의 자연수 값을 입력 받기 위해서 a,b 변수를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 result()함수에서 '몫''나머지' 값을 구해서 출력 합니다.  


정수 값에서는 소수점 이하 값들은 버려집니다. 그래서 나눈 값은 몫만 남게 되는거죠
%는 나머지 값을 구해주는 연산자 입니다.








20151019


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




섭씨온도를 화씨온도로 변환/CtoF




프로그램 명: CtoF

제한시간: 1 초

섭씨 온도를 화씨 온도로 변환하는 프로그램을 작성하세요.

화씨 온도 = 9 / 5 * 섭씨온도 + 32

입력

1 에서 100 사이의 자연수가 입력으로 주어진다.

출력

소수 첫째 자리까지 출력한다.

입출력 예

입력

50

출력

122.0





문제 풀이



1) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Main {
 
	Scanner sc = new Scanner(System.in);        
	PrintStream p = System.out;
	double a;
	
	public static void main(String[] args) {
		Main ma = new Main();
	    ma.input();  
	    ma.temper();
	}
	
	void input(){
		a = sc.nextDouble(); 
	}
	void temper(){
		double tempera = 9/5.0*a + 32;
		p.printf("%.1f",tempera);
	}
}





*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.

우선 1개의 자연수 값을 입력 받기 위해서 a 변수를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 temper()함수에서 수식으로 화씨 온도를 구하고 소수점 첫째 자리까지 출력합니다. 


소수점 결과값을 원하기 때문에 9/5 인 부분을 9/5.0 으로 만들어 줬습니다. 이러면 소수점 자리 까지 겨로가값을 얻을 수 있어요.  %.1f 는 오른쪽에 있는 tempera 값을 소수점 1번째 자리까지만 출력한다는 의미 입니다.




20151019


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




네 수의 평균/average



프로그램 명: average

제한시간: 1 초

네 정수를 입력 받아 평균을 출력하는 프로그램을 작성하세요.

정수 입력 사이에는 공백으로 구분되며 , 평균은 소수 2 째 자리까지 출력하세요.(소수 3 번째 자리에서 반올림)

입력

입력은 1 에서 100 사이의 자연수가 입력된다.

출력

입출력 예

입력

7 7 7 7

출력

7.00

입력

2 5 9 5

출력

5.25


문제 풀이



1) 풀이

import java.util.Scanner;
public class  Main{
   public static void main(String[] args){
     Scanner sc = new Scanner(System.in);
         int a = sc.nextInt();
         int b = sc.nextInt();
         int c = sc.nextInt();
         int d = sc.nextInt();
          
         double result = (a+b+c+d)/4.0;
         result = Math.round(result*100);
         System.out.println(result*0.01);
   }
}

2) 풀이

import java.io.PrintStream;
import java.util.Scanner;

public class Test {
 
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);        
	        PrintStream p = System.out;
	        double a = sc.nextInt(); 
	        double b = sc.nextInt();
	        double c = sc.nextInt();
	        double d = sc.nextInt();    
	        p.printf("%.2f",(a+b+c+d)/4.0);
	}
}




*1번 풀이와 2번 풀이 코드 내용은 같습니다. 다만 2번 풀이는 c언어에서 많이 하는 메타문자를 사용 했습니다.


우선 4개의 자연수 값을 입력 받기 위해서 a,b,c,d 변수를 선언을 하고 그 변수에 입력값을 받습니다.

그 다음 4개의 값을 더하고 4로 나눈 평균 값을 실수형 변수에 저장합니다. 그 다음 방법은 2가지 종류로


1) Math 클래스가 가지고 있는 round() 함수를 사용합니다. 반올림 해주는 함수죠 예)10.6 => 11

원하는 소수점 3번째 자리에서 반올림을 하기위해서 100을 곱해 소수점 2째 자리 까지는 정수형으로 바꿔 줍니다. 그런다음 변수에 저장을 하고 그 값을 다시 0.01을 곱해서 소수점을 복원 시켜 줍니다.


2)C 언어에서 주로 사용하는 개념인듯 합니다. C는 잘 몰라요.

똑같이 더한값을 실수형인 4.0 으로 나눠주면 소수점까지 결과값이 나옵니다. 그걸 %.2f 를 사용해서 소수점 2번째까지만 출력해 주면 됩니다.




20151018


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




삼각형 넓이 구하기/triangle


프로그램 명: triangle

제한시간: 1 초 

삼각형 넓이를 구하는 문제이다.

넓이 = 밑변 * 높이 / 2

입력

두 자연수가 입력으로 주어진다. 두 수는 1000 이하의 자연수이고 ,차례대로 밑변과 높이이다.

출력

넓이를 소수 이하 2 자리 ( 세 번째 자리에서 반올림 ) 까지 출력한다.

입출력 예

입력

9 83 

출력

373.50



문제 풀이



1) 풀이

import java.util.Scanner;

public class Test {
 
	Scanner sc = new Scanner(System.in);
	
	public static void main(String[] args) {
		 Scanner sc = new Scanner(System.in);
	       
		 double bottom = sc.nextDouble();
	     double hight = sc.nextDouble();
	         
	     double area = (bottom*hight)/2;
	     long temp  = (long)(area*100);
	     area = temp*0.01;
	     System.out.println(area);
	}
}

2) 풀이

import java.util.Scanner;

		Scanner sc = new Scanner(System.in);
	double bottom;
	double hight;
	
	public static void main(String[] args) {
		Test ts = new Test();
		ts.input();
		ts.triangle();
	}
	void input(){
		bottom = sc.nextDouble();
		hight = sc.nextDouble();
	}
	void triangle(){
		double area = (bottom*hight)/2.0;
		long temp  = (long)(area*100);
		area = temp;
		area = temp*0.01;
		System.out.println(area);
	}




*1번 풀이와 2번 풀이 코드 내용은 같습니다. 다만 2번 풀이는 함수를 사용했을 뿐이죠.


우선 2개의 자연수 값을 입력 받기 위해서 bottom, hight 변수를 선언을 하고 그 변수에 입력값을 받습니다.

그럼 삼각형의 넓이 = 높이*밑면/2 를 area 변수에 저장하고 100을 곱해서 정수형 변수에 넣어주고 다시 0.01 을 곱해서 소수점 자리가 가능한 double 변수에 저장하고 출력합니다.


여기서 왜 100을 곱했다가 0.01 을 곱해서 다시 원상 복귀 하는지 잘 이해하셔야 합니다.
소수점 자리 값을 정수형으로 형변환을 해주면 소수점 자리값을 버립니다. 이것을 이용해서 소수점 2째 자리까지 남겨야 하기 때문에 소수점 2째 자리를 정수값의 범위안으로 곱해주고  그뒤 형변환을 함으로써 버리려고자 했던  소수점 3째 자리이후로 지워줍니다. 그다음 다시 0.01 을 곱해서 원하는 소수점 2째 자리까지 소수점이 남게 되는거죠.

예) 1.2345     소수점 2째 자리 까지 출력   1.23
   그러면 1.2345 * 100    ->     123.45   ->   정수형   ->   123   ->   123 * 0.01    ->   1.23
   원하는 소수점 2째 자리 까지만 남겨졌습니다.









20151018


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




기본 연산/OP


프로그램 명: op

제한시간: 1 초

두 자연수 a,b 를 입력으로 받아 a+b(합),a-b(차),a*b(곱),a/b(몫),a%b(나머지) 를 구하는 프로그램을 작성하시오.

a 가 5 이고 , b 가 3 이면

5+3=8
5-3=2
5*3=15
5/3=1
5%3=2

입력

두 수 a,b 는 1000 이하이다.

출력

숫자와 연산자 사이에 공백이 없이 출력 예의 형식으로 출력한다.

입출력 예

입력

3 5

출력

3+5=8
3-5=-2
3*5=15
3/5=0
3%5=3



문제 풀이



import java.util.Scanner;

public class Test {
 

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		
		
		System.out.println(a+"+"+b+"="+(a+b));
		System.out.println(a+"-"+b+"="+(a-b));
		System.out.println(a+"*"+b+"="+(a*b));
		System.out.println(a+"/"+b+"="+(a/b));
		System.out.println(a+"%"+b+"="+(a%b));
	}
}


우선 자연수 2개를 입력 받아야 하기 때문에 변수 a, b 를 선언과 동시에 값을 직접 입력 받아야 하기 때문에 Scanner 객체를 만들고 정수형 값을 입력 NextInt(); 를 사용해서 변수에  분 값을 입력 받습니다.(정수 값으로 하기 위해서 int 를 사용 했습니다.)
변수를 (+,-,*,%)연산 값을 ()괄호로 구분을 해주고 출력을 해주면 됩니다.








20151018


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




두수의 교환/swap



프로그램 명: swap

제한시간: 1 초

두 정수를 입력으로 받아 수를 교환하는 프로그램을 작성하시오.

입력

두 정수가 입력으로 주어진다.

출력

두 정수를 바꾸어서 출력한다.

입출력 예

입력

10 20

출력

20 10

입력

5 1

출력

1 5



문제 풀이



import java.util.Scanner;
import java.io.PrintStream;

public class Main {
 
	public static void main(String[] args) {

		int a, b, c;
		Scanner sc = new Scanner(System.in);
		PrintStream p = System.out;
		a = sc.nextInt();
		b = sc.nextInt();
		c = a;
		a = b;
		b = c;
		
		p.println(a + " " + b);
	}
}


우선 자연수 2개를 입력 받고 2개의 값을 바꿔야 하기 때문에 임시 변수 c 를 하나 더 선언 해 줍니다. (정수 값으로 하기 위해서 int 를 사용 했습니다.)
그리고 값을 직접 입력 받아야 하기 때문에 Scanner 객체를 만들고 정수형 값을 입력 받는 NextInt(); 를 사용해서 변수에  분 값을 입력 받습니다.

변수 특성상 새로운 값이 들어오면 그전 값은 사라집니다. 덮어 씌우기 형식이죠
그래서 사용하지 않는 변수에 입력값 하나를 저장시키고 c = a;  b 의 값을 a 에 저장 합니다. 그 다음 a 값을 가지고 있는 c 의 값을 a에 저장 합니다. a = c; 그럼 a 와 b 의 값이 안정적으로 바뀌게 됩니다.

* 이부분 잘 이해하셔야해요 정렬부분에서 많이 사용 됩니다. 종이에 적어서 이해하면 더 빨라요. 그다음 바뀐 부분을 출력 해주면 됩니다.







20151018


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




분을 초로 변환/m2s



프로그램 명: m2s

제한시간: 1 초


분을 입력으로 받아 초로 변환하는 프로그램을 작성하시오.

입력

분 m 이 자연수로 주어진다. ( 1 <= m <= 60)  범위 제한은 구현 안해도 됩니다.

출력

변환 된 초를 출력 예의 형식으로 출력한다. 출력을 간단히 하기 위해 1 분도 1 minutes 로 쓰기로 한다.

입출력 예

입력 2 출력 2 minutes is 120 seconds



문제 풀이



import java.util.Scanner;

public class Main {
 
	public static void main(String[] args) {

		int a, b;
		Scanner sc = new Scanner(System.in);
		PrintStream p = System.out;
		a = sc.nextInt();
		b = a*60;
		
		p.println(a + " minutes is " + b + " seconds.");
	}
}


우선 자연수 1개를 입력 받고 분을 초로 변경한 값을 저장하기 위해서 변수 2개(a, b) 를 선언해 줍니다.
(정수 값으로 하기 위해서 int 를 사용 했습니다.)
그리고 값을 직접 입력 받아야 하기 때문에 Scanner 객체를 만들고 정수형 값을 입력 받는 NextInt(); 를 사용해서 변수에  분 값을 입력 받습니다.

입력 받은 분 값에 60을 곱한 값을 다른 변수에 저장하고 출력문으로 분 값과 초 단위 값을 출력 해주면 됩니다.





20151018


*이문제는 Scanner 와 System.out.println() 출력문을 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.




사각형 넓이 구하기/area





프로그램 명: area

제한시간: 1 초  

두 자연수를 입력으로 받아 직사각형의 넓이를 구하는 프로그램을 작성하시오.


입력


두 자연수가 입력으로 주어지고 , 각각 가로 , 세로 길이이다.단위는 같은 것으로 가정한다.

두 수는 1000 을 넘지 않는다.



온라인 저지를 처음 사용하는 분들을 위해....
  1. "입력의 제한 조건 1000 을 넘지 않는다" 이 부분은 따로 처리 하지
    않으셔도 됩니다.
    입력 데이터가 이 범위를 넘어서 들어오지 않는다는
    것입니다. 
  2. 이 제한 조건이 없으면 20 억 이상의 수가 입력으로 주어지는 경우 정수형
    변수로 해결할 수가 없습니다. 즉 정수 범위 안의 입력이니 정수로
    처리할 수 있다는 것입니다.

  3. "입력" "출력"...이 부분도 출력해서는 안되고 단지 두 수만 입력으로 받아서
    결과 값만을 출력해야 합니다.

  4. 시간초과 오류란 각 문제 당 제한 시간이 있어 이 제한 시간내에 결과가 나오지
    않으면 이 오류를 출력합니다. 이 오류가 발생할 경우 조금 더 좋은 알고리즘을
    생각해서 해결해야 합니다.

출력

직 사각형의 넓이를 출력한다.

입출력 예

입력

10 20

출력

200



문제 풀이


import java.util.Scanner;

public class Main {
 
	public static void main(String[] args) {

		int a ,b;
		Scanner sc = new Scanner(System.in);
		
		a = sc.nextInt();
		b = sc.nextInt();
		
		System.out.println(a*b);
	}
}

 

우선 두 자연수를 입력 받아야 하기 때문에 변수 2개(a, b)를 선언해 줍니다.
(정수 값으로 하기 위해서 int 를 사용했습니다.)

그리고 값을 직접 입력 받아야 하기 때문에 Scanner 객체를 만들고 정수형 값을 입력 받는 nextInt(); 를 사용해서 변수에 값을 입력 받습니다.

그런 다음 두 값을 곱해주는 결과를 출력해주면 됩니다.



+ Recent posts