말하는 컴공감자의 텃밭

SW expert 17642. 최대 조작 횟수 <D3> - 자바 java 본문

알고리즘/SW expert - Java

SW expert 17642. 최대 조작 횟수 <D3> - 자바 java

현콩 2023. 8. 12. 15:45
728x90

17642. 최대 조작 횟수
쉬운 문제를 저처럼 안헤매기를...

 

문제를 처음 읽었을때. 정답률 17%도 보고   이게 뭐지 생각했다.

A와 B가 같아지고 싶은데, 소수로 빼고 더하고만 가능하다.

조작 횟수를 출력한다 만약 소수로 같아지게 할 수 없다면 -1을 출력한다.

단 최대 값을 원하는 문제이다.

 

예를 들어 A 가 5 B가 10라면.

A에 +2 또는 +3을하고, B에 -3 또는 -2. 아니면 한쪽에서 +2, +3, -2 -3 하는 방법이 있다.

모두 operation은 2이므로 답은 2가 된다.

 

소수가 눈에 띄어서 따로 함수로 풀었으나, 웬걸 이거 최대값이니까 2로 최대한 빼주고 더해주면 되는 문제였다.

어? 쉽네 하고 슥슥 작성했다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
 
class Solution {
 
    public static long maxOper(long A0, long B0) {
        if (A0 == B0) {
            return 0// 이미 같은경우
        }               
        long diff = Math.abs(A0 - B0);
        
        if (diff == 1) {
            return -1// 차이가 1인경우 불가능.
        } else if(diff % 2 == 1){
            return (long)((diff - 1/ 2) ;              
        } else {
            return (long)(diff/2);
        }         
    }
 
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
 
        for (int i = 0; i < T; i++) {
            long a = sc.nextLong();
            long b = sc.nextLong();
            long answer = maxOper(a, b);
 
            System.out.printf("#%d %d\n", i + 1, answer);
        }
 
        sc.close();
    }
}
 
cs

 

46개에서 42개가 맞아서 음? 했다.

반례가 있나~ 해서 gpt 도움을 받을라 했는데

이쉑 반례를 달라니까.
이젠 11이랑 12도 같다 이거냐

아무튼 계속 생각해봐도 반례가 없었다. 워낙에 간단한 로직이라

혹시나 해서 문제를 다시봤는데

what~

A가 B보다 크면 -1을 해줬어야 했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.*;
 
class Solution {
 
    public static long maxOper(long A0, long B0) {
        if (A0 == B0) {
            return 0// 이미 같은경우
        }else if(A0 > B0) {
            return -1// A는 더하기 연산만 가능하므로..
            // 이걸 까먹어서 1시간을 헤맸네
        }
        
        long diff = Math.abs(A0 - B0);
        
        if (diff == 1) {
            return -1// 차이가 1인경우 불가능.
        } else if(diff % 2 == 1){
            return (long)((diff - 1/ 2) ;              
        } else {
            return (long)(diff/2);
        }         
    }
 
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
 
        for (int i = 0; i < T; i++) {
            long a = sc.nextLong();
            long b = sc.nextLong();
            long answer = maxOper(a, b);
 
            System.out.printf("#%d %d\n", i + 1, answer);
        }
 
        sc.close();
    }
}
 
cs

답 코드..

 

그냥 멍청한.

 

ㅋㅋㅋㅋ ㅋㅋ 40분 찾았잖아

 

진짜 코테에서도 이럴까봐 두렵다.

728x90
Comments