paizaでの勉強記録です。
今回は下記のレベルアップ問題集のCランク問題の「検索履歴」を実施しました。
ArrayListを検索履歴の格納用として使用しました。
Listからremoveした後に勝手に要素の前詰めをしてくれるんですね
設計段階で検索履歴にある文字列が来た場合の既にある要素の削除や、履歴の先頭に持ってくる処理をどうすればいいのかと悩みましたが、ArrayListが全部解決してくれました、、、
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 検索ワードの数
int number = sc.nextInt();
// 検索履歴
List<String> searchHistory = new ArrayList<>();
for (int i = 0; i < number; i++) {
// 検索ワードの取得
String inputWord = sc.next();
// 取得した検索ワードが検索履歴に存在するかのチェック
if (searchHistory.contains(inputWord)) {
// 先に存在している検索履歴を削除してから、検索履歴の先頭に追加
// 後に削除にする場合はlastindexofで削除対象の場所を探す
searchHistory.remove(searchHistory.indexOf(inputWord));
searchHistory.add(0, inputWord);
} else {
searchHistory.add(0, inputWord);
}
}
// 検索履歴を先頭から出力
for (String word: searchHistory) {
System.out.println(word);
}
sc.close();
}
}
参考