단계별로 풀어보기
36유니온 파인드유니온 파인드(또는 disjoint set, 상호 배타적 집합, ...) 자료구조를 배워 봅시다.4
www.acmicpc.net
오늘부터 다양한 문제들을 풀어보기 위해서 단계별로 정리되어있는 문제들을 풀어보기로 했다.
오늘은 입출력과 사칙연산, 조건문의 문제들을 풀어보았다.(13문제, 7문제 총 20문제)
처음 시작하는 문제들이다보니 브론즈 등급이라 어려울만한 문제는 없다.
하지만 유의해야 하는 문제 한두개만 작성해본다.
백준 1008 - 나눗셈
https://www.acmicpc.net/problem/1008
1008번: A/B
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
문제분석
나누기를 하면 되는 아주아주 별거아닌 문제이다.
하지만 여기서 출력 조건에 상대오차 10^-9이하면 정답이다. 라는 조건이 붙어있었다.
4 / 5 = 0.8 과 같이 소수가 나와도 허용이지만,
10 /3 = 0.3333333.... 과 같이 무한하게 나오는 소수는 제한해줘야 한다는 말이다.
// 출력을 소수점 아래 9자리까지 제한
DecimalFormat df = new DecimalFormat("0.000000000");
String formattedResult = df.format(result);
그래서 찾아보다가 DecimalFormat 이라는 것을 찾았다. DecimalFormat으로 숫자를 원하는 형식으로 표현할 수 있다.
DecimalFomat에 서식 문자열을 표현한 후 원하는 숫자의 format으로 형식을 지정해줄 수 있다.
정답
import java.util.Scanner;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
double result = (double) A / B;
// 출력을 소수점 아래 9자리까지 제한
DecimalFormat df = new DecimalFormat("0.000000000");
String formattedResult = df.format(result);
// 결과 출력
System.out.println(formattedResult);
sc.close();
}
}
백준 2884 - 알람시계
https://www.acmicpc.net/problem/2884
2884번: 알람 시계
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,
www.acmicpc.net
문제분석
문제는 길지만, 그냥 주어지는 시간에 45분을 빼서 표현하면 된다.
여기서 유의해야 하는점은 45분이 빠지므로, 상황을 45분을 빼서 시간이 바뀌느냐 안바뀌느냐 2개로 나눌 수 있다.
45분을 빼고 시간이 안바뀐다면, 그냥 그대로 분만 빼면 되고,
만약 45분을 빼서 시간이 줄어들 때는, 00시에서 빼서 23시로 넘어가는 상황도 고려해야 한다.
resultTime = (time - 1 + 24) % 24; // 음수가 발생하지 않도록 24로 나눈 나머지를 사용
resultMinute = 15 + minute; // 음수 방지를 위해 15를 더함
그래서 시간이 줄어들 경우, 시간에 24를 더한 후 다시 나머지를 사용해서, 음수가 나오지 않도록 한다.
예를들어 0시에서 1을 빼면 -1시가 되는데, 이걸 + 24해서 23시로 만들어줄 수 있다.
분의 경우에도 현재 분에서 45분을 빼게되면 분은 15분 + 현재 분만큼이 된다.
예를들어 42분에서 45분을 빼면 15 + 42분인 57분이 되게 된다.
정답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int time = sc.nextInt();
int minute = sc.nextInt();
int resultTime;
int resultMinute;
if (minute >= 45) {
resultTime = time;
resultMinute = minute - 45;
} else {
resultTime = (time - 1 + 24) % 24; // 음수가 발생하지 않도록 24로 나눈 나머지를 사용
resultMinute = 15 + minute; // 음수 방지를 위해 15를 더함
}
// 결과 출력
System.out.println(resultTime + " " + resultMinute);
sc.close();
}
}
'Code Test > Java' 카테고리의 다른 글
백준 단계별 풀이 - 심화1 (1) | 2023.12.27 |
---|---|
백준 단계별 풀이 - 문자열 (1) | 2023.12.23 |
백준 단계별 풀이 - 반복문, 1차원 배열 (1) | 2023.12.21 |
백준 2018 - 수들의 합 5 (1) | 2023.12.19 |
백준 11659 - 구간합 구하기 4 (0) | 2023.12.14 |