본문 바로가기
백준(C언어)/22년 7월

7월 31일(일) - 7단계(1193번)

by C0MPAS 2022. 7. 31.

7단계 - 1193번

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

문제점

1. 홀수와 짝수를 나누는 기준을 대각선 한 줄의 합이 같다는 것에서 착안하여 hap이라는 변수로 설정

-> 숫자가 너무 정신없어서 풀이가 힘들어지므로, 직관적으로 line이라는 변수로 1부터 시작

 

2. 

 

//////////////////////////////////////////

https://abcdefgh123123.tistory.com/186

해당 풀이 참조 -> 추후 복습 및 추가 공부 필요

//////////////////////////////////////////

 

최초풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void)
{
	/*       [x]
	숫자 합 2[1]        1/1
	숫자 합 3[2,3]      1/2, 2/1
	숫자 합 4[4,5,6]    3/1, 2/2, 1/3
	숫자 합 5[7,8,9,10] 1/4, 2/3, 3/2, 4/1
	숫자 합 6[11,12,13,14,15] 5/1, 4/2, 3/3, 2/4, 1/5

	1 12 321 1234
	1 21 123 4321
	*/

	int hap = 3;
	int start = 2;
	int front, rear;
	int x;
	scanf("%d", &x);

	if (x == 1)
	{
		printf("1/1");
		return 0;
	}
	
	while (1)
	{
		if (start <= x && x <= start + hap -2)
		{
        	if(hap %2==0)
            {
            	
            }
            else if(hap %2 ==1)
            {
            
			}
		}
		start = start + (hap - 2);
	}

	//printf("%d/%d", , );
	return 0;
}

 

최종풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void)
{
	int x;
	scanf("%d", &x);

	int line = 1;
	while (1) 
	{
		if ((line - 1) * (line) / 2 < x && x <= (line) * (line + 1) / 2)
		{
			break;
		}
		line++;
	}

	if (line % 2 != 0)
	{
		int a = line * (line + 1) / 2;
		printf("%d/%d", a - x + 1, line - (a - x));
	}
	else
	{
		int a = line * (line + 1) / 2;
		printf("%d/%d", line - (a - x), a - x + 1);
	}

	return 0;
}

 

출처: https://www.acmicpc.net/problem/1193

댓글