배열에서 삼각형을 만들 수 있는 숫자 3개가 있는지 없는지 찾는 문제인데
풀이가 정렬 한 다음에
for문 1번돌리면서 A[i] + A[i+1] > A[i+2] 를 만족하는게 있으면 true이고 없으면 false인데
여기서 계속 이해가 안가는게 왜 붙어있는 3개만 비교하는건가요??
예를 들어서 A[i] + A[i+2] > A[i+5] 이렇게 서로 떨어져잇는건 비교를 안해봐도 되는 이유가 뭔지를 모르겠어요
배열에서 삼각형을 만들 수 있는 숫자 3개가 있는지 없는지 찾는 문제인데
풀이가 정렬 한 다음에
for문 1번돌리면서 A[i] + A[i+1] > A[i+2] 를 만족하는게 있으면 true이고 없으면 false인데
여기서 계속 이해가 안가는게 왜 붙어있는 3개만 비교하는건가요??
예를 들어서 A[i] + A[i+2] > A[i+5] 이렇게 서로 떨어져잇는건 비교를 안해봐도 되는 이유가 뭔지를 모르겠어요
좌표도 아니고 단지 숫자 3개로 어떻게 삼각형을 만드는지 알 수 있지? 더 정확한 정보가 필요하겠는데
숫자 3개가 a, b, c가 있으면 a+b>c, a+c>b, b+c>a 를 만족하면 되요
삼각형의 세 변의 길이가 될 수 있나를 묻는거 같은데, 당연히 원래는 저렇게만 하면 안 되고 모든 경우를 검사해야함. 하지만 모범 풀이는 대개 맞고, 그러면 정렬을 하는 이유가 있겠지? 한번 생각해보면 좋겠네.
(a, b, c)가 정렬이 되있다고 가정하면 정렬때문에 b+c>a, a+c>b는 만족하기때문에 a+b>c만 검사하면 되는데 제가 이해가 안가는부분은 왜 서로 붙어있는것만 검사하는지 이해가 안되요 예를들어서 (a,b,c,d,e)가 있다면 a,b,c를 검사하고 왜 a,b,d는 검사를 안하고 바로 b,c,d로 넘어가는지 모르겟어요
문제를 정확히 모르니까 맞는지는 모르겠는데 일단 배열이 정렬되어있다고 생각하면 A[i] + A[i+1]만 봐도 되는 이유는 그게 가장 만들 수 있는 수 중에 가장 크니까
문제는 codility traingle문제에요
문제를 그렇게 말하면 어케찾노
codility라는 사이트의 triangle문제에영
뭐 다 설명한거 같은데 아직도 이해안된거 같으니까 다시 설명하면 A[i+2]보다 작은 두 숫자로 만들 수 있는 가장 큰 합은 A[i] + A[i+1]임. 이게 A[i+2]보다 같거나 작으면 삼각형을 만들 수가 없음
문제는 가장 큰 합을 구하는건 아니고 삼각형되는건지만 보는건데 밑에 댓글단거처럼 [1,2,5,5,7,9] 배열이 있으면 해당 알고리즘으로는 1, 5, 5는 검사를 하지 않게되는데 이 부분이 이해가 안가요 왜 여긴 검사를 안하나요..?
합을 왜 구하는지 진짜 모름?
무슨 합 말하시는건지? ㅠㅠ
니 말은 1,5,5도 되는데 왜 2,5,5만 검사하냐는건데 2,5,5가 안되면 1,5,5를 볼 필요가 없어서 그런거라고
아하 감사합니다
떨어져 있는게 되는데 붙어있는게 안될까?
a[i+2] <= a[i+2+k] 니까 a[i]+a[i+1] > a[i+2+k] >= a[i+2] 그리고 a[i+2]에 대해서 이것보다 작거나 같으면서 합이 제일 큰 두 수는 a[i], a[i+1]임 따라서 연속된 세 수만 보면 됨
배열이 만약 [1, 2, 5, 5, 7, 9]가 있으면 1,2,5 검사할때 1+2는 5보다 작으니까 패스하게되고 2, 5, 5검사로 넘어가는데 1, 5, 5검사해보면 삼각형이 되는데 1, 5, 5는 왜 검사를 안하는건가요??
2 5 5 검사하면 삼각형 되잖아 지금 삼각형 개수가 몇개인지 세는게 아니라 삼각형의 존재 유무만 확인하는 거니까 그렇지
i번째 원소에 대해서 이게 삼각형에서 제일 긴 변이라고 가정하면 나머지 두 변이 i-1 i-2일때만 보면 되지 왜냐면 이게 안되면 무조건 안되고 이게 되면 삼각형이 존재한다는걸 확인한거니까. 말한대로 당연히 i-3 i-1 이런 조합도 삼각형 만들 수도 있지 하지만 정렬되어있기때문에 i-3 i-1 이 되는 상황이면 i-2 i-1도 무조건 되는거라 안보는거지
이것도 이해안되면 수학부터 해야할듯 ㅇㅇ;
딱봐도 이거 중딩 정보 숙제네 숙제는 스스로해라