HackerRank; Sales By Match(Java8)
問題
同じ色の靴下のペア数を返却する関数を作成する問題。
回答
※注意
別解の方がスマート。
昇順ソートした入力ar
の先頭から靴下のペアを探索する。
添字と添字+1の要素が同じであればペアとみなし、添字を+2する。
ペアじゃなければ、添字を+1する。
public static int sockMerchant(int n, List<Integer> ar) { int count = 0; Collections.sort(ar); for(int i=0;i<=n-2;){ if(ar.get(i) == ar.get(i+1)){ count++; i += 2; }else{ i++; } } return count; }
別解
こちらの方がスマート。
色毎に靴下の数を数え、結果を配列に格納する。
配列の要素数/2の合計がペア数となる。
public static void main(String[] args) { Scanner s = new Scanner(System.in); int[] freq = new int[101]; int n = s.nextInt(); for(int i = 0; i < n; i++){ int x = s.nextInt(); freq[x]++; } int total = 0; for(int i = 1; i < 101; i++){ total+=freq[i]/2; } System.out.println(total); }