푸는데 꼬박 2일걸렸다.. 물론 일이 바빠서 제대로 푼건 몇시간 안되지만

역시 시작을 잘못 시작하게 되면 계속 꼬이게 되는 걸 경험했다.

처음엔 3으로 빼면서 5로 나눈 카운트를 구하고 5로 빼면서 3으로 나눈 카운트를 각각 구했는데

잘 안풀렸다.

결국엔 처음부터 다시 입력 조건 별로 확인해보니 무조건 3씩 빼면서 5로 나눴을때 나머지가 없으면 최소가 된다는 것을 확인하고 금방 풀렸다.

 

문제 풀기 전! 밑그림이 가장 중요하다.

 

8번만에 성공 ㅋㅋㅋ

 

내 풀이 :

 

 

 

규칙성을 찾아봐도 규칙이 안보이므로 2차원 리스트로 해결!

처음에 1차원 리스트로하다가 잘 안되서 2차원 리스트로 풀었는데

다른 풀이들을 보니 1차원으로 충분히 해결가능,...

내일은 1차원으로 다시 풀어봐야지.

 

내 풀이:

 

 

 

ACM호텔. 수학 문제

규칙을 찾는 문제였다.

주어진 예제입력과 직접 테스트케이스를 정해서 규칙을 찾아보았다.

If문을 통해 2가지 경우를 나눠서 출력하도록 했다.

 

1. N( 몇번째 손님) / H(높이) 의 나머지가 0 일 경우 

 이 경우에는 나머지가 0으로 나오므로 가장 위의 방번호가 주어진다.

6번째 손님에 높이가 6이면 601호

12번째 손님에 높이가 6이면 602호

18번째 손님에 높이가 6이면 603호

.

.

 이와 같이 H가 N의 배수이면 앞의 층수는 H이고 뒤의 호수는 N의 배수만큼 늘어난다

그러므로 코딩은 다음과 같이 

나머지가 0이면 h*100을 곱한수에 몫을 더해주면 된다.

 

2. N( 몇번째 손님) / H(높이) 의 나머지가 0가 아닐 경우

이 경우에는 각 테스트케이스로 규칙을 찾아보니

10번째 손님에 높이가 6이면 101~ 601 까지 돌아가고 다시 102, 202, 302, 402 로 10번째손님이 402호에 배정.

72번째 손님에 높이가 30이면 101~ 3001 까지 돌아가고 다시 102~ 3002 까지가면 60명. 남은 12명은 101 ~ 1203해서 72번째 손님은 1203방에 배정된다.

 

이와같이 규칙은 

N / H 의 나머지에 *100을 곱하고 N/H의 몫에 1을 더하면 방이 계산된다.

=> 높이만큼 반복하고 남은 나머지는 1호~1+나머지호수 까지 방이 주어지게 되므로.

 

그래서 그리 어렵지 않게 풀 수 있었다!

 

 

내 풀이

달팽이는 올라가고 싶다

간단한 수학문제다.

A-B 만큼 올라가다가 마지막에는 A만큼 한번더 올라가면  V 막대에 다 올라갈수 있다.

그러므로 풀이방법은 (V-A)에 (A-B)의 몫을 구하고 +1를 해주면 된다.

라고 생각했는데 틀렸다....

80 25 6666으로 했을때

 

6666-80 / 80 - 25 = 119.74545 가 나온다.

55*120 = 6600

55*119 = 6545 가 나오므로 120이 구해지고 +1을 해줘야 했다.

 

그래서 몫을 반올림하고 +1을 더해주는 방법으로 하니 풀렸다.

 

내 풀이

 

 

 

숏 코딩

 

 

 

분수찾기 문제.

규칙을 찾는 것이 어려웠다.

처음에 시간복잡도 생각없이 WHILE 반복으로 처리하다가 시간복잡도를 생각하고 처음부터 다시 풀었다.

문제 풀이 방법은 X가 주어졌을 때 X가 어떤 배열에서 시작되는지를 구해서 시작과 X의 차이만큼 분모, 분자를 계산해서 구했다.

 

예)  X = 14

 

1의 시작은 1/1

2의 시작은 1/2 

3의 시작은 3/1

4의 시작은 1/4 

와 같이 짝수면 가로로 홀수면 세로 끝에서 시작하여

 

 

 

 

세로에서 시작시 분자 - 1, 분모 +1

가로에서 시작시 분자 + 1 , 분모 - 1 로 진행한다.

세로 3/1 에서 시작시 3/1-> 2/2 -> 1/3

가로 1/4 에서 시작시 1/4-> 2/3 -> 3/2 -> 4/1 순.

 

시간 복잡도를 생각하여 입력된 X만큼 반복하는 것이 아니라

X보다 큰 최대 카운트를 찾았다.

즉 14가 입력되었을때 14의 가장마지막 끝인 15를 구했고 15까지 오는 카운트는 5라는 것을 구했다.

규칙은

1 -> 1

2 -> 2,3

3 -> 4,5,6

4 -> 7,8,9,10

.

.

 

이제 14의 시작점을 알았으니 시작점과 14의 분자, 분모 차이만 빼주고 출력하면 끝!

 

 

내 풀이

 

벌집문제.

규칙을 찾아서 문제를 풀려고 노력했다.

처음에는 1을 포함하고 For 반복문으로 규칙을 찾다보니 잘 안풀렸는데

1일 때는 무조건 1을 출력하고 

2부터 규칙을 찾아보니

2 ~ 7 / 2

8 ~ 19 / 3

20 ~ 37 / 4

38 ~ 61 / 5 

 

이렇게 한칸씩 늘어나면서 6의배수 * 단계-1 만큼 늘어나는 것을 찾았다.

즉 각 단계의 마지막 숫자가

2일 때는 1 + 6  = 7 

3일 때는 1 + 6 + 12  = 19

4일 때는 1 + 6 + 12 + 18  = 37

5일 때는 1 + 6 + 12 + 18 + 24 = 61 

이 된다.

 

 

내 풀이 

 

 

다른 풀이

백준 숏코딩을 보니 신기하게?? 풀었는데 아직 이해가 가지 않는다.

나머지 풀이들은 대부분 비슷한 방식이었다.

백준 문제시작 !

 

문제 풀이는 간단하다.

수학 방정식으로 풀면된다.

대신 나는 생각없이 길게~~~~ 풀어서 제출했는데

다른 사람들이 푼 결과들을보니 1줄로도 가능한 문제였다.

1줄은 조금 가독성이 떨어지는 것 같고 2줄이 적당한 문제인 것 같다.

앞으로 가독성은 높이면서 줄일 수 있는건 줄이도록 !

 

내 풀이 

 

다른 풀이 예

 

+ Recent posts