6 분 소요

👉 백준 조건문 https://www.acmicpc.net/step/4


백준 단계별로 풀어보기 2단계 - 조건문(5~7번) 입니다.

🔥시험기간에도 화이팅🔥


5. 알람시계 (2884번)

image-20231016132956688

https://www.acmicpc.net/problem/2884

창영이가 알람을 45분 일찍 맞추기 때문에

입력된 시간보다 45분 빠른 시간을 출력해주면 된다.

입력된 분이 45보다 작을 때0시 -> 23시 일 때를 유의해서 코드를 짜면 된다.


Java (Scanner)

import java.util.Scanner;

public class Main {
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    //입력
    int h = sc.nextInt();
    int m = sc.nextInt();
    //조건 확인 및 출력
    if (m < 45) { //분이 45보다 작을 때
      h--;
      m = 60 - (45 - m);
      if (h < 0) { //시가 0보다 작아졌을 때
        h = 23;
      }
      System.out.println(h + " " + m);
    } else {  //분이 45보다 클 경우
      System.out.println(h + " " + (m - 45));
    }
  }
}

입력 받은 분이 45보다 작을 때 (1시간은 60분이기 때문)

시간을 1 빼주고, 60분에서 입력받은 분과 45의 차를 빼줬다.

그리고 시간이 -1이라는 시간은 없기 때문에,

시간이 -1이 된다면 23으로 바꿔주었다.

-

Java (BufferedReader + StringTokenizer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    //입력
    int h = Integer.parseInt(st.nextToken());
    int m = Integer.parseInt(st.nextToken());
    //조건 확인 및 출력
    if (m < 45) { //분이 45보다 작을 때
      h--;
      m = 60 - (45 - m);
      if (h < 0) { //시가 0보다 작아졌을 때
        h = 23;
      }
      System.out.println(h + " " + m);
    } else {  //분이 45보다 클 경우
      System.out.println(h + " " + (m - 45));
    }
  }
}

-

C++

#include <iostream>
using namespace std;

int main() {
	int h, m;
	cin >> h >> m; //입력

	if (m < 45) { //조건 비교
		h--;
		m = 60 - (45 - m);
		if (h < 0) {
			h = 23;
		}
		cout << h << " " << m; //출력
	} else {
		cout << h << " " << m - 45;
	}
	return 0;
}

지난 주에 C++ 시험을 봤기 때문에 C++로 풀어보았다.

image-20231016183949548

제출번호 68071114 - C++

제출번호 68071091 - JAVA (BufferedReader + StringTokenizer) (156ms)

제출번호 68071085 - JAVA (Scanner) (232ms)

C++이 빠르긴 하다….😮


6. 오븐 시계 (2525번)

image-20231016185057433

https://www.acmicpc.net/problem/2525

첫째 줄에 시작하는 시간이 주어지고

둘째 줄에 조리 시간이 주어진다.

60분을 초과할 때와 24시를 넘어갈 때를 주의해서

조리가 끝나는 시간을 출력해주면 된다!


Java (Scanner)

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //입력
    int h = sc.nextInt();
    int m = sc.nextInt();
    int t = sc.nextInt();

    h += t / 60; //분을 60으로 나눈 몫(시간) 추가하기
    m += t % 60; //분을 60으로 나눈 나머지(분) 추가하기

    if (m >= 60) { //더한 분이 60을 초과했을 때
      h++;	//1시간 늘리기
      m -= 60; //60을 초과한 값일 경우
    }
    if (h >= 24) {
      h -= 24;
    }
    //출력
    System.out.println(h + " " + m);
  }
}

조리시간(t)60으로 나눈 몫(시간)시(h)에 더해주고

60으로 나눈 나머지분(m)에 더해준다.

만약 더하고 나서의 분이 60을 초과하면 60을 빼서 분을 제대로 표시하고, 시간을 1시간 늘려주면 된다.

24시간을 초과한 경우에도 24를 빼주어 시간을 제대로 표시하면 된다.

-

Java (BufferedReader + StringTokenizer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    //입력
    int h = Integer.parseInt(st.nextToken());
    int m = Integer.parseInt(st.nextToken());
    int t = Integer.parseInt(br.readLine());

    h += t / 60; //분을 60으로 나눈 몫(시간) 추가하기
    m += t % 60; //분을 60으로 나눈 나머지(분) 추가하기

    if (m >= 60) { //더한 분이 60을 초과했을 때
      h++;	//1시간 늘리기
      m -= 60; //60을 초과한 값일 경우
    }
    if (h >= 24) {
      h -= 24;
    }
    //출력
    System.out.println(h + " " + m);
  }
}

-

C++

#include <iostream>
using namespace std;

int main() {
	int h, m, t;
	//입력
	cin >> h >> m;
	cin >> t;

	h += t / 60;
	m += t % 60;

	if (m >= 60) {
		h++;
		m -= 60;
	}
	if (h >= 24) {
		h -= 24;
	}
	//출력
	cout << h << " " << m;

	return 0;
}

푸는 방법만 알면 언어만 바꾸는 것은 쉽다!

image-20231021221626870

제출번호 68301462 - C++

제출번호 68301455 - Java (BufferedReader + StringTokenizer) (156ms)

제출번호 68301448 - Java (Scanner) (236ms)


7. 주사위 세개 (2480번)

image-20231021221835364

https://www.acmicpc.net/problem/2480

주사위의 3개의 눈을 입력받아 규칙에 맞게 상금을 출력해주면 된다.


  • 규칙 1 (모두 같은 눈일 경우)

10,000 + 눈 * 1,000

  • 규칙 2 (같은 눈이 2개일 경우)

1,000 + 눈 * 100

  • 규칙 3 (모두 다른 경우)

가장 큰 눈 * 100


이제 저 규칙에 따라서 어떻게 조건문으로 비교를 하느냐가 문제인데

배열정렬을 통해 풀면 된다!

코드를 통해 살펴보자


Java (Scanner)

import java.util.Arrays;
import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //주사위의 눈을 저장할 배열 선언
    int arr[] = new int[3];
    //입력
    for (int i = 0; i < 3; i++) {
      arr[i] = sc.nextInt();
    }
    //입력받은 눈을 오름차순으로 정렬
    Arrays.sort(arr);
    //비교 및 출력
    if (arr[0] == arr[2]) { //눈이 모두 같은 경우
      System.out.println(10000 + arr[2] * 1000);
    } else if (arr[0] == arr[1] || arr[1] == arr[2]) { //2개만 같은 경우
      System.out.println(1000 + arr[1] * 100);
    } else { //모두 다른 경우
      System.out.println(arr[2]*100);
    }
  }
}

비교를 할 때 1번 2번, 1번 3번, 2번 3번… 이렇게 여러번 비교를 해주면 너무 오래걸리고 코드도 복잡해진다.

이를 해결하기 위해서 배열로 입력을 받아서, 오름차순으로 정렬을 해주면 된다.

오름차순으로 정렬을 해주게 되면

처음과 마지막이 같으면 모든 값이 같게 되고,

두 값이 같은 경우1번 2번, 2번 3번 만 비교를 해주면 된다.

모두 다른 경우에는 가장 큰 값을 출력해야 하는데,

이미 오름차순으로 정렬을 해두었기 때문에 마지막 값이 가장 큰 값이 된다. 따라서 마지막 값을 출력해주면 된다!

-

정렬하는 것을 직접 구현할 수도 있지만 (나중에 배열 파트에 직접 구현하는 문제가 나온다)

자바에는 이미 Arrays라는 클래스에 sort라는 정렬을 해주는 메소드가 있기 때문에

이미 있는 메소드를 사용하면 정말 편리하다!

Arrays.sort(배열명) 을 사용하면 오름차순으로 정렬해준다!

-

Java (BufferedReader + StringTokenizer)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Arrays;

public class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    //주사위의 눈을 저장할 배열 선언
    int arr[] = new int[3];
    //입력
    for (int i = 0; i < 3; i++) {
      arr[i] = Integer.parseInt(st.nextToken());
    }
    //입력받은 눈을 오름차순으로 정렬
    Arrays.sort(arr);

    if (arr[0] == arr[2]) { //눈이 모두 같은 경우
      System.out.println(10000 + arr[2] * 1000);
    } else if (arr[0] == arr[1] || arr[1] == arr[2]) { //2개만 같은 경우
      System.out.println(1000 + arr[1] * 100);
    } else { //모두 다른 경우
      System.out.println(arr[2]*100);
    }
  }
}

-

C++

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int arr[3];
	//입력
	for (int i = 0; i < 3; i++) {
		cin >> arr[i];
	}
	//정렬하기
	sort(arr, arr + 3);

	//비교 및 출력
	if (arr[0] == arr[2]) { 
		cout << 10000 + (arr[2] * 1000);
	}
	else if (arr[0] == arr[1] || arr[1] == arr[2]) {
		cout << 1000 + (arr[1] * 100);
	}
	else {
		cout << arr[2] * 100;
	}
	return 0;
}

CPP 에서는 sort 함수를 사용하기 위해 algorithm 이라는 헤더파일을 선언해야 한다.

sort(배열 시작 주소, 배열의 마지막 인덱스 + 1) 이라고 써주면 오름차순 정렬이 된다!

image-20231021230043111

제출 번호 68303421 - C++

제출 번호 68303412 - Java(BufferedReader + StringTokenizer) (124ms)

제출 번호 68303405 - Java(Scanner) (216ms)


cpp

CPP는 낭만이 넘치는 언어이다 :)

끝!

댓글남기기