Paiza Cランク獲得問題（Dランク相当） データセット選択メニュー

paizaのCランク獲得問題の解答がなかったので、備忘録として残します。
明らかに簡単な問題の場合は省略しますが、個人的に少しでも考えたコードを残していきたいと思います。
初心者ですので醜いコードを書きますが、温かい目で見守っていただけると嬉しいです。
また、より良い記述方法などありましたら、コメント等で教えていただけると嬉しいです。

# 目次
- ランダムアクセス
- 複数回のランダムアクセス
- 最大値と最小値
- 動的配列
- 文字列の配列
- 数値の出現率
- 英小文字の出現率
- 文字列の出現率
- 価格の算出 
- 商品の検索
- 集合の検索
- 重複の削除
- 重複の判定 1
- 集合の結合


## ランダムアクセス
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__array_step1/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
        int [] NM=Console.ReadLine().Split().Select(int.Parse).ToArray();  
        int N=NM[0];
        int M=NM[1];
        int [] A=Console.ReadLine().Split().Select(int.Parse).ToArray();
        Console.WriteLine(A[M-1]);
    }
}


```

## 複数回のランダムアクセス
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__array_step2/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int [] A=Console.ReadLine().Split().Select(int.Parse).ToArray();  
        
        int Q=int.Parse(Console.ReadLine());
        int [] B=Console.ReadLine().Split().Select(int.Parse).ToArray();
        for(int i=0;i<Q;i++){
            Console.WriteLine(A[B[i]-1]);
        }
    }
}

```


## 最大値と最小値
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__array_step3/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
        int [] ABC=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int result=ABC.Max()-ABC.Min();
        Console.WriteLine(result);
    }
}


```

## 動的配列
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__array_boss/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;
using System.Globalization;
class Program
{
    public static void Main()
    {
        int [] NQ=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int N=NQ[0];
        int Q=NQ[1];
        List <int> A=Console.ReadLine().Split().Select(int.Parse).ToList();
        
        for(int i=0; i<Q;i++){
            int [] query=Console.ReadLine().Split().Select(int.Parse).ToArray();
            switch (query[0]){
                case 0:
                    A.Add(query[1]);
                    break;
                case 1:
                    A.RemoveAt(A.Count-1);
                    break;
                case 2:
                    for(int j=0; j<A.Count(); j++){
                        if(j==A.Count()-1){
                            Console.WriteLine(A[j]);
                        }else{
                            Console.Write(A[j]+" ");
                        }
                    }
                    break;
            }
        }
        
    }
}


```


## 文字列の配列
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__string_boss/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
        int [] HWrc=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int H=HWrc[0];
        int W=HWrc[1];
        int r=HWrc[2]-1;
        int c=HWrc[3]-1;
        string [,]M=new string[H,W];
        for(int i=0;i<H;i++){
            string S=Console.ReadLine();
            for(int j=0;j<W;j++){
                M[i,j]=S[j].ToString();
            }
        }
        switch (M[r,c]){
            case "#":
                Console.WriteLine("Yes");
                break;
            case ".":
                Console.WriteLine("No");
                break;
        }
        
    }
}

```

## 数値の出現率
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__dict_step1/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
        Dictionary <int,int> result =new Dictionary<int,int>();

        for(int i=0;i<10;i++){
            result[i]=0;
        }
        for(int i=0;i<N;i++){
            result[A[i]]+=1;
        }
        List<int> valuse=new List<int>(result.Values);
        string resultValuse=string.Join(" ",valuse);
        Console.WriteLine(resultValuse);
    }
}

```
辞書型を用いました。
変数名が分かりにくいのは許してください。。


## 英小文字の出現率
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__dict_step2/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        string S=Console.ReadLine();

        Dictionary <string,int> result =new Dictionary<string,int>();

        for(char i='a';i<='z';i++){
            result[i.ToString()]=0;
        }
        for(int i=0;i<N;i++){
            result[S[i].ToString()]+=1;
        }
        List<int> valuse=new List<int>(result.Values);
        string resultValuse=string.Join(" ",valuse);
        Console.WriteLine(resultValuse);
    }
}

```
基本的に一個前と同じです。
もっとスマートな書き方はありそうです。

## 文字列の出現率
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__dict_step3/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        Dictionary <string,int> result =new Dictionary<string,int>();
        HashSet<string> strings= new HashSet<string>();
        List <string> list= new List<string>();
        for(int i=0;i<N;i++){
            string s=Console.ReadLine();
            list.Add(s);
        }
        list.Sort();
        foreach(var l in list){
            strings.Add(l);
        }
        foreach(string s in strings){
            result.Add(s,0);
        }
        for(int i=0;i<N;i++){
            result[list[i]]+=1;
        }
        foreach(KeyValuePair<string, int> item in result) {
        Console.WriteLine("{0} {1}", item.Key, item.Value);
        }
        
    }
}

```
とても冗長なコードになってしまいました。。
正解が知りたいです。。


## 価格の算出
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__dict_step4/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int [] NM=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int N=NM[0];
        int M=NM[1];
        Dictionary <string,string> map=new Dictionary<string,string> ();
        List <int>values=new List<int>();
        for(int i=0; i<N;i++){
            string []item=Console.ReadLine().Split();
            map[item[0]]=item[1];
        }
        for(int i=0; i<M;i++){
            string strings=Console.ReadLine();
            if(map.ContainsKey(strings)){
                string result=map[strings];
                Console.WriteLine(result);
            }else{
                Console.WriteLine("-1");
            }
        }
    }
}

```


## 商品の検索
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__dict_boss/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int [] NQ=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int N=NQ[0];
        int Q=NQ[1];
        
        Dictionary<string, int> values = new Dictionary<string, int>();
        List <int> result=new List<int>();
        for(int i=0; i<N;i++){
            string item=Console.ReadLine();
            if(!values.ContainsKey(item)){
                values.Add(item,i+1);
            }
        }
        for(int i=0; i<Q;i++){
            string strings=Console.ReadLine();
            if(values.ContainsKey(strings)){
                    result.Add(values[strings]);
                }else{
                    result.Add(-1);
                }
        }
        foreach(int list in result){
            Console.WriteLine(list);
        }
    }
}


```


## 集合の探索
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__set_step1/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;



class Program
{
    public static void Main()
    {
        int [] NB=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int N=NB[0];
        int B=NB[1];
        int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();

        if(A.Contains(B)){
            Console.WriteLine("Yes");
        }else{
            Console.WriteLine("No");
        }
    }
}


```

## 重複の削除
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__set_step2/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
        HashSet<int>list=new HashSet<int>();
        for(int i=0;i<N;i++){
            list.Add(A[i]);
        }
        string result=string.Join(" ",list);
        Console.WriteLine(result);
    }
}


```


## 重複の判定 1
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__set_step3/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
        for(int i=1;i<N;i++){
            bool found=false;
            for(int j=0;j<i;j++){
                if(A[i]==A[j]){
                    found=true;
                    break;
                }
            }
            if(found){
                Console.WriteLine("Yes");
            }else{
                Console.WriteLine("No");
            }
        }
        
    }
}


```

重複の判定 2も関係なく出来ました。。


## 集合の結合
[問題文](https://paiza.jp/works/mondai/data_structure/data_structure__set_boss/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int []B=Console.ReadLine().Split().Select(int.Parse).ToArray();
        HashSet<int>list=new HashSet<int>();

        foreach(var addA in A){
            list.Add(addA);
        }
        foreach(var addB in B){
            list.Add(addB);
        }
        int[] data=list.ToArray();
        Array.Sort(data);
        string result =string.Join(" ",data);
        Console.WriteLine(result);
        
    }
}
```
HashSetはSortできないので、配列に直してから並び替えました。