0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Paiza Cランク獲得問題(Dランク相当) 配列活用メニュー②

Posted at

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

後半はランクC相当の内容になっていま。

目次

  • 指定要素の削除
  • 九九表
  • 全ての要素を用いた処理
  • 配列のサイズの変更
  • 【配列への副作用を伴う操作】条件を満たす要素のみの配列作成
  • 傾斜配点
  • 内定
  • queue (9) 係
  • 二人三脚
  • ボウリング
  • 【配列に対しての複雑な処理】集団行動

指定要素の削除

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        int N =int.Parse(Console.ReadLine());
        int [] A= new int [N];
        
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }

        List<int> listA=new List<int>(A);
        int n=int.Parse(Console.ReadLine());
        listA.RemoveAt(n-1);
        foreach(var list in listA){
            Console.WriteLine(list);
        }
    }
}

九九表

問題文

using System;

class Program
{
    public static void Main()
    {
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9;j++){
                if(j<9){
                    Console.Write(i*j+" ");
                }else{
                    Console.WriteLine(i*j);
                }
            }
        }
    }
}

全ての要素を用いた処理

問題文

using System;
class Program
{
    public static void Main()
    {
        int N=int .Parse(Console.ReadLine());
        int []A=new int[N];
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        for(int i=0;i<N;i++){
            for(int j=0;j<i;j++){
                Console.WriteLine(A[i]*A[j]);
            }
        }
    }
}

配列のサイズの変更

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        string [] Nn=Console.ReadLine().Split();
        int N=int.Parse(Nn[0]);
        int n=int.Parse(Nn[1]);
        int []A=new int[N];
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        List <int> result=new List<int>();
        for (int i = 0; i < Math.Min(n, N); i++){
            result.Add(A[i]);
        }
        for (int i = N; i < n; i++){
            result.Add(0);
        }
        foreach (var num in result){
            Console.WriteLine(num);
        }
        
    }
}

リストで実装しました。

重複要素の削除

問題文

using System;
class Program
{
    public static void Main()
    {
        int N=int .Parse(Console.ReadLine());
        int []A=new int[N];
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        
        int [] data =A.Distinct().ToArray();
        foreach(var result in data){
            Console.WriteLine(result);
        }
        
        
    }
}

【配列への副作用を伴う操作】条件を満たす要素のみの配列作成

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        string [] NK=Console.ReadLine().Split();
        int N=int.Parse(NK[0]);
        int K=int.Parse(NK[1]);
        int [] A= new int [N];
        
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        
        
        List <int> data =new List<int>();
        for(int i=0;i<N;i++){
            if(A[i]>=K){
                data.Add(A[i]);
            }
        }
        foreach(var result in data){
            Console.WriteLine(result);
        }
        
        
    }
}

傾斜配点

問題文

using System;
using System.Linq;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []M=Console.ReadLine().Split().Select(int.Parse).ToArray();
        int [] result =new int[N];
        for(int i=0;i<N;i++){
            int []A=Console.ReadLine().Split().Select(int.Parse).ToArray();
            result[i]=M[0]*A[0]+M[1]*A[1]+M[2]*A[2]+M[3]*A[3]+M[4]*A[4];
        }
        Console.WriteLine(result.Max());
    }
}

内定

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        string []NKM=Console.ReadLine().Split();
        int N=int.Parse(NKM[0]);
        int K=int.Parse(NKM[1]);
        int M=int.Parse(NKM[2]);
        int []A=new int [N];
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        Array.Sort(A);
        Array.Reverse(A);
        List<int> result=new List<int>();
        for(int i=0;i<N;i++){
            if(A[i]>=K){
                result.Add(A[i]);
            }
        }
        if (result.Count <= M){
            result.Clear();
        }else{
            result.RemoveRange(0, M);
        }
        Console.WriteLine(result.Count);
    }
}

queue (9) 係

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        List<int> queue=new List<int>();
        for(int i=0;i<N;i++){
            string [] S=Console.ReadLine().Split();
            switch(S[0]){
                case "in":
                    queue.Add(int.Parse(S[1]));
                    break;
                case "out":
                    if(queue.Count>0){
                        queue.RemoveAt(0);
                    }
                    break;
            }
        }
        foreach(var result in queue){
                Console.WriteLine(result);
        }
    }
}

二人三脚

問題文

using System;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int []A=new int [N];
        for(int i=0;i<N;i++){
            A[i]=int.Parse(Console.ReadLine());
        }
        Array.Sort(A);
        int result=A[1]-A[0];
        int one=0;
        int two=1;
        for(int i=0;i<N;i++){
            for(int j=i+1;j<N;j++){
                if(A[j]-A[i]<result){
                    result=A[j]-A[i];
                    one=i;
                    two=j;
                }
            }
        }
        Console.WriteLine(A[one]);
        Console.WriteLine(A[two]);
    }
}

場所取り

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        string []NKF=Console.ReadLine().Split();
        int N=int.Parse(NKF[0]);
        int K=int.Parse(NKF[1]);
        int F=int.Parse(NKF[2]);
        List <int>A=new List<int>();
        for(int i=0;i<K;i++){
            A.Add(int.Parse(Console.ReadLine()));
        }
        A.RemoveRange(0,F);
        HashSet<int> result=new HashSet<int>(A);
        
        foreach(var data in result){
            Console.WriteLine(data);
        }

    }
}

ボウリング

問題文

using System;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        int[][] P = new int[4][];
        for (int i = 0; i < 4; i++)
        {
            P[i] = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
            Array.Reverse(P[i]);
        }
        
        List<int> pin =new List<int>();
        for (int i = 3; i >= 0; i--)
        {
            for (int j = 0; j < P[i].Length; j++)
            {
                pin.Add(P[i][j]);
            }
        }
        
        int p=pin.IndexOf(1)+1;
        int count=0;
        
        foreach(var result in pin){
            if(result==1){
                count++;
            }
        }

        Console.WriteLine(p);
        Console.WriteLine(count);
        
    }
}


一番苦労しました。
二次元配列のまま行う方法が分からなかったので、一次元に変換して行いました。

【配列に対しての複雑な処理】集団行動

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        string []NQ=Console.ReadLine().Split();
        int N=int.Parse(NQ[0]);
        int Q=int.Parse(NQ[1]);
        List<int> list=new List<int>();
        for(int i=0;i<N;i++){
            list.Add(i+1);
        }
        for(int i=0;i<Q;i++){
            string [] S=Console.ReadLine().Split();
            switch(S[0]){
                case "swap":
                    int A=int.Parse(S[1]);
                    int B=int.Parse(S[2]);
                    int tmp;
                    tmp=list[A-1];
                    list[A-1]=list[B-1];
                    list[B-1]=tmp;
                    break;
                case "resize":
                    int C=int.Parse(S[1]);
                    if (list.Count >= C){
                        list.RemoveRange(C, list.Count - C);
                    }
                    break;
                case "reverse":
                    list.Reverse();
                    break;
            }
        }
        foreach(var result in list){
            Console.WriteLine(result);
        }
    }
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?