강의로 돌아가기
HyunSoo Park

수학 공식인가요 이거?(풀이가 있습니다 주의!)

 Math.min(...sides)*2-1

이게 왜...? 아니.. 맞긴한데 ... 왜죠???
??????????????????????????

3 개의 답변
손광호

두 변을 알고 있을때 두가지 경우가 있습니다.

  1. 이미 아는 변 중의 하나가 가장 긴 경우
  2. 모르는 변이 가장 긴 경우

(a < b 의 경우)
1의 경우에는
b < a + c
a를 좌측으로 이항하면
즉 b - a < c

2의 경우에는
c < a + b

따라서 c의 값은 b - a < c < b + a인데
우측항에서 좌측항 - 1이 c의 개수이므로
c의 개수는 (a + b) - (b - a) => 2a - 1

  • HyunSoo Park

    답변 감사합니다......네... 보고 이해는 했는데 이걸 생각해서 푸는거에 벽느끼네요...ㅎ....

    HyunSoo Park―2022.12.26 14:33
박구

좀 더 쉬운 답을 드릴게요.
더 긴 변이 어떤 건 지는 중요하지 않습니다.
어떤 2변이 주어졌을 때 삼각형이 될 수 있는 경우는 항상 큰 변에서 작은 변을 뺀 값에서 1을 더한 값부터, 큰 변과 작은 변을 더한 값에서 1을 뺀 값까지 입니다.
그림으로 상상하면 쉽게 이해 됩니다.
예를 들어 3, 6 케이스를 보죠.
6길이 변이 있습니다. 그 위에 3길이 변이 있는데 나머지 한 변이 3길이라면 6길이와 3길이 2개를 합한 길이가 같아지니 삼각형이 될 순 없겠죠? 2개가 딱 달라붙으니까요.
그러므로 삼각형이 되려면 나머지 변은 4부터 시작해야 하는 걸 알 수 있습니다.
그렇게 1씩 증가하다가 나머지 변이 9가 되면 역시 삼각형이 될 순 없겠죠. 이번엔 원래 있던 3길이와 6길이를 합한 길이가 나머지 변이랑 딱 달라붙으니까요.
종이에 그려보면 나머지 변이 1씩 증가할 때마다 작은 변이 항상 반원을 그린다는 걸 알 수 있습니다. 그 반원의 시작 점과 끝 점은 삼각형을 못 만드는 딱 달라붙는 지점입니다.

그럼 이제 작은 변의 반원이 절반만 그려진 경우, 즉 가장 높은 상태를 그려보면 중심에서부터 높이만 3입니다. 여기까지 오르막이고, 여기서부터 내리막이죠.
그러므로 오르막의 시작은 중심부터 오른쪽으로 3이 더해진 지점이고, 내리막의 끝은 중심부터 왼쪽으로 3이 빼진 지점입니다.
그런데 이미 알고 있듯이 반원의 시작과 끝을 포함하면 딱 달라붙어서 삼각형이 될 수가 없습니다.
그러므로 0과 6을 뺀 1~5까지인 5가 됩니다.

sh

Math.min(...array) 이런 건 규칙을 쉽게 표현한거고, 중요한 건 문제와 예제를 보고 규칙을 찾는 것이지요.

설명은 다른 분들이 잘해주셨으니 패스하고 코딩테스트를 공부하는 방법에 대해 팁을 드리자면,

1.주어진 예제를 통해 반복되는 규칙들을 찾는다.

(잘 보이지 않는다면 쉬운 방법은 예제를 가지고 직접 손으로 하나씩 값을 구해가며 풀어보는 겁니다)
2.내가 찾은 규칙이 맞는지 테스트 해본다.

3.어떻게 작성할지(for, while문을 쓸지.. 등등) 생각 후에 효율성은 생각하지 않고 그대로 코드를 작성해본다.

4.작성된 코드를 효율적인 코드로 리팩토링

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.