728x90
반응형
문제
정답 풀이
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int X = Integer.parseInt(br.readLine());
int top = 1;
int bottom = 1;
int line = 1;
int n = 1;
if(X==1) System.out.print(top+"/"+bottom);
else{
while(n < X) {
line++;
n += line;
}
// 짝수행
if(line%2==0){
top = line;
for(int i = 0; i < n-X; i++){
top--;
bottom++;
}
}
// 홀수행
else{
bottom = line;
for(int i = 0; i < n-X; i++){
top++;
bottom--;
}
}
System.out.print(top+"/"+bottom);
}
br.close();
}
}
- 메모리 16104KB
- 시간 156ms
다 풀고 난 후에 구글링해서 보니까 제가 제일 비효율적으로 푼 거 같긴 해요..
while문도 돌고 for문도 도니까요..
그치만 구글링해서 본 블로그 코드들은 아직 이해가 안가서..일단 제 실력대로 푼 코드는 이러합니다!
코드가 진행됨에 따라 분수는 위 표와 같이 변해요
라인이 짝수라면 주황색 화살표를 따라 분모가 -1, 분자가 +1 되고,
라인이 홀수라면 파란색 화살표를 따라 분모가 +1, 분자가 -1 됩니다
while문을 돌려서 line값과 line값에 최대 갯수(예를 들어 라인이 3이라면 값의 갯수는 6)를 구했어요
line값이 짝수인지 홀수인지 if문으로 확인해주고
짝수라면 최대 갯수와 구하고자 하는 X의 차이만큼 for문을 돌리면서
분자(top)은 line에서 -1만큼 줄어들게, 분모(bottom)은 1에서 +1만큼 늘어나게 해줬어요
홀수라면 짝수와 반대로
분자(top)은 1에서 +1만큼 늘어나게, 분모(bottom)은 line에서 -1만큼 줄어들게 했습니다
제 설명이 좀 부족하죠..ㅠ
코드를 보면서 하나하나 이럴 때 어떨까 공책에 쓰면서 직접 돌려보시면 좀 이해가 되실거에요!
728x90
반응형
'Computer Science (CS) > 알고리즘' 카테고리의 다른 글
[백준/Java] 10757번 큰 수 A+B (0) | 2023.05.20 |
---|---|
[백준/Java] 2869번 달팽이는 올라가고 싶다 (0) | 2023.05.20 |
[백준/Java] 2292번 벌집 (0) | 2023.05.18 |
[백준/Java] 2903번 중앙 이동 알고리즘 (0) | 2023.05.18 |
[백준/Java] 2720번 세탁소 사장 동혁 (0) | 2023.05.18 |