https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
위 문제를 며칠이 지나도록 풀지 못했었다.
먼저 필자는 위 문제를
분자: 11232211234543211234567654321
분모:121123432112345654321123456787654321
와 같은 수열로 접근했지만 이를 구현할 방법을 알지 못했다.
핵심은 필자가 접근한 방식보다 구현이 훨씬 쉬운
대각선 라인이라는 아이디어가 있었다.
while(x>i){
x-=i;
i++;
}
여기서 x는 주어진 x이고, i(초기화 i = 1)는 대각선 라인번호이다.
각 라인에는 각 라인번호만큼의 분수가 존재한다.
따라서 x가 1번 라인에 속한 분수의 갯수보다 크다면 1을 빼준다.
또 x가 2번 라인에 속한 분수의 갯수보다 크다면 2를 빼준다.
이 반복문이 끝나고 나면 i에는 대각선의 라인번호, x에는 그 라인 번호에서 몇 번째 분수인지에 대해 알 수 있다.
이 아이디어에서 배웠던 점은 반복문 조건의 양변을 변화시킨 것이다.
'algorithm(c++)' 카테고리의 다른 글
달팽이는 올라가고 싶다 (0) | 2023.04.24 |
---|---|
물통 옮기기 (0) | 2023.04.21 |
그룹단어 체커 아이디어 (0) | 2023.03.31 |
c++ vector reverse, 반복자와 포인터 차이, 배열로 점수 쌓기, 공백포함 문자열 입력 (0) | 2023.03.22 |
c++ 소수점 출력 포맷 지정 2가지 방법 (0) | 2023.03.15 |