2023년 1월 7일에 작성됨
https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
문제 분석
대각선이 짝수번째인지 홀수번째인지에 따라 분수의 규칙이 달라진다.
n번째 줄에는 n개의 분수가 있다.
대각선 라인이 짝수이면 분자가 오름차순, 분모가 내림차순이다.
대각선 라인이 홀수이면 분모가 내림차순, 분모가 오름차순이다.
즉, 입력되는 값이 몇 번째 줄의 몇 번째 위치인지 찾고 위에서 찾은 규칙을 적용해준다.
소스 코드 (⭕)
#include <stdio.h>
int main()
{
int n, diff, top, bottom, line = 0, end = 0;
// line은 대각선으로 그었을 때 짝수 또는 홀수 번째에 있는지 판별하는 변수
// end는 해당 라인의 가장 끝의 번째(1, 3, 6, 10, ...)를 나타내는 변수
scanf("%d", &n); // 몇 번째 분수인지 n으로 입력 받음
while (n > end) { // n이 end보다 클 때까지 반복
line += 1; // line의 수 1씩 증가
end += line; // end에 line 누적합 구해서 라인의 끝의 번째 구함
}
diff = end - n; // diff에 해당 라인의 끝 번째와 실제 입력받은 번째의 차이를 넣음
if (line % 2 == 0) { // line이 짝수라면
top = line - diff; // 분자
bottom = diff + 1; // 분모
}
else { // line이 홀수라면
top = diff + 1; // 분자
bottom = line - diff; // 분모
}
printf("%d/%d", top, bottom); // 분자/분모 형식으로 출력
}
코드 분석
1. n번째 분수인지를 입력받는다.
2. while문으로 라인의 끝의 번째를 구한다.
3. line이 짝수인지 홀수인지에 따라 분자와 분모의 값을 다르게 적용시켜 준다.
end
이미 파이썬으로 풀었던 문제라 설명은 간단하게 작성하였다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Java]백준_10039 : 평균 점수 (0) | 2023.11.16 |
---|---|
[Python]백준_2562 : 최댓값 (0) | 2023.11.16 |
[C]백준_11654 : 아스키 코드 (2) | 2023.11.14 |
[Java]백준_11942 : 고려대는 사랑입니다 (0) | 2023.11.14 |
[Python]백준_10807 : 개수 세기 (0) | 2023.11.13 |