[알고리즘 공부 4일차]

김주현·2021년 4월 16일
0

알고리즘

목록 보기
4/27
post-custom-banner
  1. 기본수학

1번. 세 정수 abc를 받고 만약 c가 b보다 작거나 같다면 -1을 리턴한다(손익분기점을 넘을수없기 때문)
이후 a(c-b)를 출력하는데 여기서 int 형이기때문에 +1을 해준다( 딱 나누어 떨어진다면 그 이득이 생기긴위해선 하나가 더커야하고 나누어떨어지지않는다면 소수점 아래는 지워지기때문에 +1해주어야한다)

2번. 정수 a를 받고 1이라면 1을 리턴하고 아니라면 변수 range 를 2로 설정하고 여기다가 6을 1씩 증가하는 i만큼 더해줘 범위를 설정한후 이 범위안에 a가있다면 그 상태의 i가 거리이다
2 ~ 8 (6개) 2칸
8 ~ 19 (12개) 3칸 -> 범위는 6개씩 증가하는 등차수열

3번. 이문제부터는 어려워서 인터넷을 참고하며 풀었던것같다

10번째 분수를 원할경우 우선 몇번째 지그재그에 해당하는지 그리고 그 지개그가 홀수번째 지그재그인지 짝수번째 인지 알아야한다
먼저 몇번쨰 지그재그인지 파악하기위해 10 > i (i+1)/2 을 만족하는 i를 구한다 여기선 4이므로 10은 4번째 지그재그이다
10은 4번째 지그재그의 몇번째 분수인지 알기위해 10에서 (i-1)
i /2를 빼준다 10-6 =4 번째 인덱스 이다.
각각 홀수 짝수의 분수 배열은
홀수 -> 분자 -> i - 인덱스 + 1 분모-> 인덱스
짝수 -> 분자 -> 인덱스 분모 -> i - 인덱스 + 1
즉, 10번째는 4/1 이다.

4번

나뭇가지의 길이를 v 올라간 길이 a 떨어진 길이 b라고 하면
(v - b) / (a - b)로 할수있고 int형이기때문에 자동 내림되기고 하루부터 시작하기때문에 1을더해주면 걸리는 기간을 알수있다
(v - b -1) / (a - b) +1

5번

층과 방번호를 출력하는것이 포인트이다.

room = arr[i][2] % arr[i][0] == 0 ? arr[i][2] / arr[i][0] : arr[i][2] / arr[i][0] + 1;
floor = (arr[i][2] % arr[i][0]) == 0 ? arr[i][0] : (arr[i][2] % arr[i][0]);
printf("%d", floor);
if (room < 10)
printf("0");
printf("%d\n", room);
이런식으로 출력하면서 룸이 한자리 숫자일떄는 앞에 0을 붙여준다.
또한 딱나누어 떨어질때는 0을출력하는것이 아닌 본래값을 출력하면된다

6번

그리디를 통해 해결하였다 입력받은 값 a를 5로 나누어 떨어지는지 계산하고 안나누어 떨어진다면 -3을 하고 카운트를 1늘린다 이과정을 반복하여 나누어떨어진다면 a/5를 카운트에 더해준다 만약 a 가 0보다 작아진다면 불가능한 값이므로 -1를 출력한다.

7번

재귀함수를 통해 해결하였다.
int getNum(int a, int b)
{
if (b == 1)
return 1;
if (a == 0)
return b;
return (getNum(a - 1, b) + getNum(a, b - 1));
}
자신의 의 호수 인원은 왼쪽의 인원과 아래쪽의 인원과 같다 1호는 무조건 1이고 0층은 각 호수와 같으니 재귀를 이용하면 쉽게 해결할수있다.

8번

double 형식을 사용하는것만으로는 문제를 해결할수없다
숫자로 받는것이 아닌 문자열로 숫자를 받아 한자리씩 계산해주는 방식을 사용했다 덧셈을 진행하며 캐리가 생길경우 (자신이 10을 넘을경우) -=10을 해주고 캐리를 1 앞자리로 넘겨준다.

9번
이해가 잘되지 않아 강의의 도움을 받았다

중요한점은 결국 우리는 횟수를 구해야하는것이기때문에
dis = c - b;
cnt = 0;
ans = 1;
while (cnt < dis)
{
ans++;
cnt += (ans / 2);
}
printf("%lld\n", ans - 1);
를 통해 문제를 해결한다
1 cnt 1
1 2
2 3
2
3
3 6
여기서 카운트에 1을 더해주면 간거리를 /2로 쉽게 구할수있기때문에 더해준다 (마지막에 뺌) 간거리는 왼쪽에서 오른쪽에서 똑같이 가기때문에 저렇게 구할수있다.

post-custom-banner

0개의 댓글