2011年9月18日日曜日

TopCoder SRM247 Div2 250Pts

この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 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計