일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터베이스
- 자바
- 회고
- SW봉사
- 코딩교육봉사
- 백준 알고리즘
- SQL
- MYSQL
- programmers
- 알고리즘
- CJ UNIT
- 백준알고리즘
- 시나공
- softeer
- 파이썬
- 프로그래머스
- 정보처리산업기사
- 백준
- 문제풀이
- 1과목
- BFS
- 코틀린
- 코딩봉사
- java
- 소프티어
- 공부일지
- C++
- 스프링
- python
- kotlin
- Today
- Total
JIE0025
[구름][난이도1] 의좋은 형제 : 자바(Java) 본문
https://level.goorm.io/exam/49088/%EC%9D%98%EC%A2%8B%EC%9D%80-%ED%98%95%EC%A0%9C/quiz/1
전글과 내용은 같은데, 드디어 자바로 문제를 풀어보게 되어 올리게 되었다.
앞으로는 자바 코딩테스트 대비 학습한 지식들을 함께 올리고자 한다.
문제
✅ 풀이과정
파이썬 풀때와 당연히 동일하게 풀었다.
https://jie0025.tistory.com/230?category=1058752
핵심은 다음 두 문장
1. 어떤 사람(one)이 다른 사람(other)에게 식량을 줄 때, 주는 양을 계산하면 다음과 같다.
( one / 2 ) + (one % 2)
2. 즉 어떤 사람(one)에게서 저만큼을 빼주고, 다른 사람(other)에겐 더해주기만 하면 된다.
⏺ 자바의 빠른 입출력
더쉬운 입출력방법 System.out.println(); 이런 애들이 있지만 사실 더 빠른방법이 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input[] = br.readLine().split(" ");
int n1,n2;
n1 = Integer.parseInt(input[0]);
n2 = Integer.parseInt(input[1]);
// 본문 내용
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.format("%d %d",n1,n2));
bw.close();
}
}
⏺ Java Pair
파이썬에서는 자연스럽게 페어를 return할 수 있었지만, 자바에서는 불가능하다.
따라서 Pair를 만들어주고 사용하면 된다.
Pair
public static class Pair<F,S>{
F first;
S second;
Pair(F first, S second){
this.first = first;
this.second = second;
}
}
- 한가지 유의할 점은 class Main 안에 class를 만들땐 static을 넣어줘야했다는점!
왜 static을 사용해야할까? 일단 졸리니 패스ㅎㅎ (WHY)
(1~2주안에 자바 기본기 갖추고 다시 쓰러 오겠다)
🔴 자바에서는...
자바에서는 바로 pair를 리턴하지 못하나…?
모르겠다
위에서 미리 계산하고 pair로 만들어 리턴하기 떄문에,,
파이썬에선 바로 return (one-(one//2 + one%2), other + (one//2 + one%2)) 한줄 코드가 가능했지만
여기에선 미리 계산을 하기 때문에
other계산할 때 위에서 반영된 one이 사용된다..😂😂
(Pair로 바로 보내는방법이 있는지 찾아봐야할듯)
뭔가 p 만들어주고
p(공식 공식) 써주면 될것 같기도 하다
public static Pair<Integer,Integer> divide_remind(Integer one, Integer other){
one = one - (one/2 + one%2) ;
other = other + (one/2 + one%2);
Pair<Integer,Integer> p = new Pair<Integer,Integer>(one,other);
return p;
}
이런 이유로 나누기값과 나머지값을 미리 계산하고 사용했다.
public static Pair<Integer,Integer> divide_remind(Integer one, Integer other){
int div = one/2;
int rem = one%2;
one = one - (div + rem) ;
other = other + (div + rem);
Pair<Integer,Integer> p = new Pair<Integer,Integer>(one,other);
return p;
}
✅ 정답 코드
import java.io.*;
class Main {
public static class Pair<F,S>{
F first;
S second;
Pair(F first, S second){
this.first = first;
this.second = second;
}
}
public static Pair<Integer,Integer> divide_remind(Integer one, Integer other){
int div = one/2;
int rem = one%2;
one = one - (div + rem) ;
other = other + (div + rem);
Pair<Integer,Integer> p = new Pair<Integer,Integer>(one,other);
return p;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input[] = br.readLine().split(" ");
int n1,n2;
n1 = Integer.parseInt(input[0]);
n2 = Integer.parseInt(input[1]);
int d = Integer.parseInt(br.readLine());
Pair<Integer,Integer> now = new Pair<Integer,Integer>(n1,n2);
for (int i = 1; i<d+1;i++){
if (i%2 == 1){
now = divide_remind(n1,n2);
n1 = now.first;
n2 = now.second;
}
else{
now = divide_remind(n2,n1);
n2 = now.first;
n1 = now.second;
}
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.format("%d %d",n1,n2));
bw.close();
}
}
잘 푼건지는 미지수이지만
제대로 처음 자바로 문제를 풀어본거라 아주 뿌듯하다.
앞으로도 자바로 열심히 풀어야지!!
'Algorithm > 구름' 카테고리의 다른 글
[구름][알고리즘 먼데이][6주차] 제곱암호 : 파이썬(python) (0) | 2022.11.20 |
---|---|
[구름][알고리즘 먼데이][2주차] 폭탄구현하기 : 파이썬(python) (0) | 2022.11.06 |
[구름][난이도1] 의좋은 형제 : 파이썬(python) (0) | 2022.10.30 |
[구름][현대모비스][예선] Dead or Arrive _ 파이썬(python) (0) | 2022.10.20 |