<

![endif]-->

fc2ブログ

11 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 01

TopCoder過去問解説

TopCoderの問題の解説を書いたり、日本語訳を書いたりします。言語はJavaで。

SRM 529 DIV2 Medium 500 

SRM529 DIV2 Medium 500

王様ソート。
問題

王の名前を世代順にソートしてね。
名前自体が違う場合は当然名前優先です。

ルパン V,ルパン III みたいなのは
ルパン III,ルパン V にする。

ルパン III,ゴエモン II,ルパン V なら
ゴエモン II,ルパン III,ルパン V な感じ。
最初に文字列でソートかけて、その後数値部分でソートを実行。 数値の処理部分が微妙すぎる。

import java.util.*;

public class KingSort {

	public String[] getSortedList(String[] kings) {
		java.util.Arrays.sort(kings);
		
		boolean isReplaced = true;
		while(isReplaced){
			isReplaced = false;
			for(int i = 0;i < kings.length -1;i++){
				String kingCur = kings[i].split(" ")[0];
				String kingNext = kings[i+1].split(" ")[0];
				
				if(kingCur.equals(kingNext)){
					int curNum = GetNum(kings[i]);
					int nextNum = GetNum(kings[i+1]);
					
					if(curNum > nextNum){
						isReplaced = true;
						String temp = new String(kings[i]);
						kings[i] = kings[i+1];
						kings[i+1] = temp;
					}
				}
			}
		}
		return kings;
	}
	
	private int GetNum(String king){
		String num = king.split(" ")[1];
		
		int rtv = 0;
		if(num.startsWith("L")){
			rtv += 50;
			num = num.replace("L", "");
		}
		else if(num.startsWith("XL")){
			rtv += 40;
			num = num.replace("XL", "");
		}
		else if(num.startsWith("XXX")){
			rtv += 30;
			num = num.replace("XXX", "");
		}
		else if(num.startsWith("XX")){
			rtv += 20;
			num = num.replace("XX", "");
		}
		else if(num.startsWith("X")){
			rtv +=10;
		}
		
		if(num.endsWith("IX")){
			rtv +=9;
		}
		else if(num.endsWith("VIII")){
			rtv +=8;
		}
		else if(num.endsWith("VII")){
			rtv +=7;
		}
		else if(num.endsWith("VI")){
			rtv +=6;
		}
		else if(num.endsWith("V")){
			rtv +=5;
		}
		else if(num.endsWith("IV")){
			rtv +=4;
		}
		else if(num.endsWith("III")){
			rtv +=3;
		}
		else if(num.endsWith("II")){
			rtv +=2;
		}
		else if(num.endsWith("I")){
			rtv +=1;
		}
		return rtv;
		
	}
}

2012/04/15 Sun. 14:47 | trackback: 0 | コメント: 0edit

コメント

コメントの投稿
Secret

トラックバック
トラックバックURL
→http://topcodermania.blog.fc2.com/tb.php/18-f0fe9a37
この記事にトラックバックする(FC2ブログユーザー)