반응형

 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.

 제한 사항

s는 길이 1 이상, 길이 8 이하인 문자열입니다.

 입출력 예

s return
a234 false
1234 true

 제출

class Solution {
  public boolean solution(String s) {
      boolean answer = true;
      if(s.length() ==4 || s.length()==6){
          for(int i=0;i<s.length();i++){
            if(s.charAt(i)<48|| s.charAt(i)>57){
                answer = false;
                break;
            }
          }
      }else{
          answer = false;
      }
      return answer;
  }
}

 문제 해결

입력 받은 문자열을 문자로 나누어 아스키 코드의 숫자 범위 48 ~ 57에 비교하여 문제 해결

반응형
반응형

 문제설명

어떤 가게의 욕심쟁이 점원은 거스름돈을 나눠줄때 거스름돈의 개수를 적게해서 주고자 한다.

거스름돈을 입력 받아 점원이 줄 수 있는 최소 거스름돈의 개수를 출력하시오.

예를 들어 54520원인 경우,

거스름돈으로 50000원권 1장, 1000원권 4장, 500원 1개, 10원 2개 해서 총 8개이다.

(※ 현재 우리나라가 사용하고 있는 화폐를 사용한다. 10원 50원 100원 500원 1,000원 5,000원 10,000원 50,000원)

 출력

최소 거스름돈의 개수를 출력한다.

 입력 예시

54520

 출력 예시

8

 제출

import java.util.Scanner;
public class Main{
    public static void main (String[] args) {
        // 10원 50원 100원 500원 1,000원 5,000원 10,000원 50,000원
        
        Scanner sc = new Scanner(System.in);
        int[] cost = {50000, 10000, 5000, 1000, 500, 100, 50, 10};
        int n = sc.nextInt(); // 거스름돈
        int a = 0; // 거스름돈 갯수
        for(int i = 0; i<cost.length;i++){
            a+= n/cost[i]; // 거스름돈 갯수
            n = n%cost[i]; // 남은 금액
        }
        System.out.println(a);
    }
}

 문제 해결

거스름돈의 갯수를 구하기 위해 우선 50,000원 부터 10원까지의 배열을 만들었습니다.

최소한의 거스름돈의 갯수를 구하기위해 50,000원 부터 시작해 최소의 값을 구했습니다.

반응형
반응형

 문제설명

컴퓨터실에서 수업 중인 정보 선생님은 냉난방기의 온도를 조절하려고 한다.

냉난방기가 멀리 있어서 리모컨으로 조작하려고 하는데, 리모컨의 온도 조절 버튼은 다음과 같다.

1) 온도를 1도 올리는 버튼

2) 온도를 1도 내리는 버튼

3) 온도를 5도 올리는 버튼

4) 온도를 5도 내리는 버튼

5) 온도를 10도 올리는 버튼

6) 온도를 10도 내리는 버튼

이와 같이 총 6개의 버튼으로 목표 온도를 조절해야 한다.

현재 설정 온도와 변경하고자하는 목표 온도가 주어지면 이 버튼들을 이용하여 목표 온도로 변경하고자 한다.

이 때 버튼 누름의 최소 횟수를 구하시오.

예를 들어, 7도에서 34도로 변경하는 경우,

7 -> 17 -> 27 -> 32 -> 33 -> 34

이렇게 총 5번 누르면 된다.

 출력

최소한의 버튼 사용으로 목표온도가 되는 버튼의 횟수를 출력한다.

 입력 예시

7 34

 출력 예시

5 (10도 -> 10도 -> 5도 -> 1도 -> 1도)

 제출

import java.util.Scanner;
public class Main{

    static int temp(int start, int finish){
    int num = 0; // 반복 횟수
    int need = finish - start; // 필요한 온도
    
    if(need < 0) need*= -1;
    
    while(true){
        if(need >= 10){ // 필요한 온도가 10도 이상
            need -= 10;
            num++;
        }else if(need > 7){ // 필요한 온도가 8도 이상일 경우 10도를 더하고 1도를 빼는것이 최소횟수
            need -= 10;
            num++;
        }else if(need >= 5){ // 필요한 온도가 5도 이상
            need -= 5;
            num++;
        }else if(need > 3){ // 필요한 온도가 4도 이상일 경우 5도를 더하고 1도를 빼는것이 최소횟수
            need -= 5;
            num++;
        }else if(need > 0){ // 필요한 온도가 1~3일 경우
            need -= 1;
            num++;
        }else if(need == 0){ 
            break;
        }else{ // 필요한 온도가 - 인 경우
            need += 1;
            num++;
        }
        
    }

        return num; // 횟수 반환
    }
    
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.println(temp(sc.nextInt(),sc.nextInt()));
    }
}

 문제 해결

필요 온도(현재 온도 - 목표 온도, 음수일 경우 *-1을 통해 양수로 변환)에 따라 최소 횟수를 구하기 위해 10도, 5도, 1도 뿐 아니라 3도 7도를 기준으로 잡았습니다.

기준보다 클 경우 각각 ±5도 ±10도를 하여 문제를 해결했습니다.

반응형
반응형

 문제설명

파파 파스타 가게는 점심 추천 파스타와 생과일 쥬스 세트 메뉴가 인기가 좋다.

이 세트 메뉴를 주문하면 그 날의 3 종류의 파스타와 2 종류의 생과일 쥬스에서 하나씩 선택한다.

파스타와 생과일 쥬스의 가격 합계에서 10%를 더한 금액이 대금된다.

어느 날의 파스타와 생과일 쥬스의 가격이 주어 졌을 때, 그 날 세트 메뉴의 대금의 최소값을 구하는 프로그램을 작성하라.

 

 출력

그날 세트 메뉴의 최소 대금을 소수 첫째자리까지 출력하시오.

 

 입력 예시

800

700

900

198

330

 

 출력 예시

987.8

 

 제출

import java.util.Scanner; 
public class Main{
    
    // 최소값 반환 함수
    static float def_min(int[] a){
        int min_num=a[0];
        for(int i = 0; i<a.length-1; i++){
        	if(min_num > a[i+1]) min_num = a[i+1];
        }
        return min_num;
    }
    
    public static void main(String[] args) {
		
	    Scanner sc = new Scanner(System.in);
        int[] a = new int[3];
        int[] b = new int[2];
        
        for(int i = 0; i<3; i++){
            a[i] = sc.nextInt();
        }
        for(int i = 0; i<2; i++){
            b[i] = sc.nextInt();
        }
        
        float a_min = def_min(a);
        float b_min = def_min(b);
        
        // 소수점을 자르기 위해 String.format 사용
        System.out.println(String.format("%.1f",(a_min + b_min)*1.1));
    }
}

 문제 해결

각 메뉴의 가격을 입력 받고 최소값을 구하여 문제를 해결했습니다.

반응형

+ Recent posts