このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
ユークリッド幾何において、三角形は角度で3種類に分類される。もし、三角形のすべての角が90度以下であれば、鋭角三角形である。もし1つの角が90度を超えていれば鈍角三角形である。もし90度の角があれば直角三角形という。また、3つの整数が与えられたとき、その数で三角形を構成できないこともある。それは1つの辺の長さが他の2辺の長さの和以上に長いときである。端点がくっつけられなくなり、三角形が構成できなくなる。3辺が引数に与えられたときに三角形を構成できなければ"IMPOSSIBLE"、鋭角三角形であれば"ACUTE"、鈍角三角形であれば"OBTUSE"、直角三角形であれば"RIGHT"を返すメソッドを作成せよ。
私の解答はこちら。Noteの項目には判定方法が載っているので、それを活用している。Noteが与えられなければ、余弦定理で3つの角度をすべて求めて判定しようと考えていました。
import java.util.Arrays; public class TriangleType { public String type(int a, int b, int c) { int[] array = {a,b,c}; Arrays.sort(array); if( array[0]+array[1] <= array[2] ){ return "IMPOSSIBLE"; }else if( array[0]*array[0]+array[1]*array[1] < array[2]*array[2]){ return "OBTUSE"; }else if( array[0]*array[0]+array[1]*array[1] > array[2]*array[2] ){ return "ACUTE"; }else{ return "RIGHT"; } } }
得点は238.84/250なのですが、提出したコードが汚いので、ちょっとだけ改良しました。ソート前のa、b、cだけで可能な限り判別しようとしたのですが、a、b、cをソートした配列だけでコードを書いてみたところ、読みやすいので、それを採用して載せました。途中から判定方法を変えず、一貫性があるから読みやすくなったのだと思います。
0 件のコメント:
コメントを投稿