설탕 배달
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int answer = 0;
while(n > 0){
if(n % 5 == 0){
n -= 5;
}else if(n % 3 == 0) {
n -= 3;
}else if(n - 5 >= 3) {
n -= 5;
}else if(n - 3 >= 3){
n -= 3;
}else{
// 정확하게 잴 수 없으면 -1 넣어주기
answer = -1;
break;
}
answer++;
}
System.out.println(answer);
}
}
반갑다 백준. 너를 처치하러 왔다.
수학문제였다. 수학이 어렵다. 수학 잘 하는 사람들은 더 예쁘게 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int count = 0;
while((n % 5 != 0) && (n > 0)){
n = n-3;
count++;
}
if(n < 0){
System.out.println(-1);
} else {
System.out.println(count + n/5);
}
}
}
일단 3으로 처리한다음 n/5를 더한다는 발상은 어떻게 해낸건지 대단하다..... 수학 잘 하는 사람들 부럽다.
Fly me to the Alpha Centauri
이건.. 못 풀었다. 수학은 젬병이라 규칙을 못 찾았다. 넌 진짜 두고보자.
풀이 사이트는 여기 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 이전 작동시기보다 k광년 이동하면 k-1, k, k+1 광년만 이동 가능
// 처음 작동 시에는 1광년만 이동 가능
// 1광년 이동하면 다음에는 0, 1, 2광년 이동 가능. 2광년 이동하고나면 1, 2, 3광년 이동 가능
// x에서 출발해 y로 도착하려고 할 때, 최소한의 작동 횟수로만 할 수 있도록 한다.
// 대신, y지점에 도착하기 직전의 이동거리는 반드시 1광년이어야함.
// 이동의 최솟값을 구하는 프로그램 작성하기.
// x는 y보다 항상 낮음
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
int[] x = new int[cnt];
int[] y = new int[cnt];
int[] answer = new int[cnt];
for(int i = 0; i < cnt; i++){
x[i] = sc.nextInt();
y[i] = sc.nextInt();
}
for(int i = 0; i < cnt; i++){
// 우주선의 속도의 기준점. 1광년 이미 이동했다고 가정
int shift_idx = 1;
int distance = y[i] - x[i] - 1;
answer[i]++;
while(distance != 0){
// 도착지점 직전 이동거리는 반드시 1광년이어야함 = shift_idx가 2 이하여야함
// 1 2 1
// 4 - 2 <= 1
// distance = 2
// 2 - 3 <= 1
// distance = 1
// 1 - 2 <= 1
// distnace = 1
// distance = 100이라고 치면
// 1 2 3 4 5 6 7 8 9 10 만 해도 55야... 감속불가
// 1 2 3 4 5 6
if(distance - (shift_idx+1) <= shift_idx){
distance -= --shift_idx;
}else{
distance -= ++shift_idx;
}
answer[i]++;
}
}
for(int out : answer){
System.out.println(out);
}
}
}
이건 작동하지 않는 상태인데, 나중에 고치거나 갈아엎을 예정이다. 일단 남겨만 놓음.
영화감독 숌
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
List<String> list = new ArrayList<>();
for(int i = 666; i <= 10000000; i++){
String str = String.valueOf(i);
if(str.contains("666")) {
list.add(str);
if(list.size()>=10000){
break;
}
}
}
System.out.println(list.get(cnt-1));
}
}
사실 속도가 부족해서 안 될 줄 알았는데.. 되네? 생각보다 제한시간이 넉넉했나보다. 뭐 나야 좋지.
최적화된 코드를 짤 수 있을 것 같은데, 짜는데 시간이 너무 오래 걸릴 것 같다. 이것도 시간이 나면 한 번 시도를 해봐야겠다.
'내가 배운 것들 > 알고리즘' 카테고리의 다른 글
알고리즘 푼 것들은 이제 깃헙에 올림 (0) | 2021.11.19 |
---|---|
항해99 11/13(토) 알고리즘 (0) | 2021.11.13 |
항해99 11/12(금) 알고리즘 (0) | 2021.11.12 |
항해99 11/11(목) 알고리즘 (0) | 2021.11.11 |
항해99 11/11(목) 알고리즘 - 알아서 푼 것들 (0) | 2021.11.11 |
댓글