Codility – Lesson 6 Sorting – Triangle
プログラミング能力を評価するオンラインテスト、Codilityで、Lesson 6 Sorting – Triangleに回答しました。
問題と結果画面
93%の評価。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; class Solution { public int solution(int[] A) { Array.Sort(A); for(int i = 0; i < (A.Length - 2); i++) { if((A[i] + A[i + 1]) > A[i + 2] && (A[i + 1] + A[i + 2]) > A[i] && (A[i + 2] + A[i]) > A[i + 1]) { return 1; } } return 0; } } |
問題と結果画面
100%の評価。
int型の最大値が3つ渡ってきた時の処理を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; class Solution { public int solution(int[] A) { int N = A.Length; Array.Sort(A); for(int i = 0; i < (N - 2); i++) { if((A[i] + A[i + 1]) > A[i + 2] || (A[i] == Int32.MaxValue && A[i] == A[i+1] && A[i] == A[i+2])) { return 1; } } return 0; } } |
問題と結果画面
100%の評価。
上記コードで100%になることはなったが、根本的な原因であるint型最大値のオーバーフローの問題が解決されていなかったので、それに対応。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; class Solution { public int solution(int[] A) { Array.Sort(A); int N = A.Length; long l, m; for(int i = 0; i < (N - 2); i++) { l = A[i]; m = A[i + 1]; // Console.WriteLine("l + m : " + (l + m)); if(l + m > A[i + 2]) { return 1; } } return 0; } } |