일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 2467번 용액 자바 - 이분탐색
- dp
- 백준 14938번 서강그라운드
- HashSet
- append
- replace()
- 18111번 마인크래프트 - java 구현
- 백준 1647번 도시 분할 계획 - java
- mysql hy000 에러
- 프로그래머스
- map
- 백준 1043번 거짓말 - java 분리 집합
- 백준 1806번 부분합 java
- 최소 힙 1927
- StringBuilder
- Stack
- 백준 1197번 최소 스패닝 트리 - java
- 백준 2473번 세 용액 - java
- StringTokenizer
- 백준 1541
- toUpperCase
- 프로그래머스 자바
- 프로그래머스 java
- ac 5430번
- hash
- 백준 3190번
- Java
- kotlin
- HashMap
- 코틀린기초
Archives
- Today
- Total
말하는 컴공감자의 텃밭
SW expert 17642. 최대 조작 횟수 <D3> - 자바 java 본문
728x90
문제를 처음 읽었을때. 정답률 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 도움을 받을라 했는데
아무튼 계속 생각해봐도 반례가 없었다. 워낙에 간단한 로직이라
혹시나 해서 문제를 다시봤는데
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 |
답 코드..
진짜 코테에서도 이럴까봐 두렵다.
728x90
'알고리즘 > SW expert - Java' 카테고리의 다른 글
SW expert 5215번 햄버거 다이어트 D3 - DFS (0) | 2023.11.13 |
---|---|
SW expert 1244번 최대 상금 - 자바 java DPS (0) | 2023.09.05 |
Sw expert - 1208.Flatten <D3> - 자바 java (0) | 2023.08.06 |
SW Expert [S/W 문제해결 기본] 1일차 - View <D3> - 자바(java) (0) | 2023.07.08 |
SW expert 백만장자 프로젝트 <D2> - 자바(java) 입출력 (0) | 2023.06.28 |
Comments