LoginSignup
1
1

Paiza Cランク獲得問題(Dランク相当) 文字列処理メニュー②

Posted at

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

目次

  • 文字列の検索
  • 文字列の反転
  • 回文判定
  • 文字列の分割
  • 日時データの変換その1
  • 日時データの変換その2
  • 数値判定
  • 重複の削除
  • パスワード作成
  • 表記の訂正
  • 数式の計算( 1 桁)
  • 数式の計算
  • 巨大な数の足し算(繰り上がりなし)
  • 巨大な数の足し算
  • 巨大な数のかけ算

文字列の検索

問題文

using System;
class Program
{
    public static void Main()
    {
       string S =Console.ReadLine();
       string T =Console.ReadLine();
       if(S.Contains(T)){
        Console.WriteLine("YES");
       }else{
        Console.WriteLine("NO");
       }

    }
}

文字列の反転

問題文

using System;
using System.Linq;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       string reverseS=new string(S.Reverse().ToArray());
       Console.WriteLine(reverseS);
    }
}

回文判定

問題文

using System;
using System.Linq;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       string reverseS=new string(S.Reverse().ToArray());
       if(S==reverseS){
        Console.WriteLine("YES");
       }else{
        Console.WriteLine("NO");
       }
    }
}

文字列の分割

問題文

using System;
class Program
{
    public static void Main()
    {
       string [] S=Console.ReadLine().Split(',');
       foreach(var result in S){
        Console.WriteLine(result);
       }
    }
}

日時データの変換その1

問題文

using System;
class Program
{
    static void Main()
    {
        string [] S=Console.ReadLine().Split('/');
        string [] R=S[3].Split(':');
        for(int i=0;i<3;i++){
            Console.WriteLine(S[i]);
        }
        for(int i=0;i<R.Length;i++){
            Console.WriteLine(R[i]);
        }
    }
}

日時データの変換その2

問題文

using System;
using System.Linq;
class Program
{
    static void Main()
    {
        string []yyyyMMddhhmm= Console.ReadLine().Split(' ');
        string yyyyMMdd=yyyyMMddhhmm[0];
        string hhmm=yyyyMMddhhmm[1];
        string [] R1=yyyyMMdd.Split('/');
        string [] R2=hhmm.Split(':');
        string [] R = R1.Concat(R2).ToArray();
        foreach(var result in R){
            Console.WriteLine(result);
        }
        
    }
}

数値判定

問題文

using System;
class Program
{
    static void Main()
    {
        string S=Console.ReadLine();
        bool result=true;
        foreach(char s  in S){
            if (!char.IsDigit(s)){
                result=false;
                break;
            }
        } 
        if(result){
            Console.WriteLine("YES");
        }else{
            Console.WriteLine("NO");
        }
    }
}

初めはTry.Parseを考えたのですが、intの範囲を超えると正しく判定されるので上手くいきませんでした。

重複の削除

問題文

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       HashSet<char> chek=new HashSet<char>();
       string result="";
       foreach (char c in S)
        {
            if (!chek.Contains(c))
            {
                result += c;
                chek.Add(c);
            }
        }

        Console.WriteLine(result);

    }
}

ハッシュセットを用いました。

パスワード作成

問題文

using System;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int Q=int.Parse(Console.ReadLine());
        int[] n = new int[Q];
        string[] c = new string[Q];
        for(int i=0;i<Q;i++){
            string[] values = Console.ReadLine().Split();
            n[i] = int.Parse(values[0]) - 1;
            c[i] = values[1];
        }
        string K = Console.ReadLine();
        string []pass=new string[N];
        for(int i=0; i<N;i++){
            pass[i]=K;
        }
        for(int i=0;i<Q;i++){
            pass[n[i]]=c[i];
        }
        for(int i=0; i<N;i++){
            Console.Write(pass[i]);
        }

    }
}

表記の訂正

問題文

using System;

class Program
{
    public static void Main()
    {
        string S=Console.ReadLine();
        string[] point =S.Split('.');
        if(point.Length>2){
            string []point1=new string[point.Length-1];
            for(int i=0;i<point1.Length;i++){
                point1[i]=point[i+1];
            }
            S=point[0]+"."+string.Join("",point1);
        }
        if (S.IndexOf('.') != -1){
            S=S.TrimEnd('0');
        }

        S=S.TrimStart('0');
        if(S.IndexOf('.')==0){
            S = "0" + S.TrimStart('0');
        }
        if(S==""){
            S="0";
        }
        Console.WriteLine(S);

    }
}

こちらのサイトを参考にさせていただきました。

数式の計算( 1 桁)

問題文

using System;

class Program
{
    public static void Main()
    {
        string S=Console.ReadLine();
        char []s=S.ToCharArray();
        int ans=(int)Char.GetNumericValue(s[0]);
        
        for(int i=0;i<s.Length;i++){
            if(s[i]=='+'){
                ans+=(int)Char.GetNumericValue(s[i+1]);
            }
            if(s[i]=='-'){
                ans-=(int)Char.GetNumericValue(s[i+1]);
            }
        }
        Console.WriteLine(ans);
    }
}

数式の計算

問題文

using System;
using System.Collections.Generic;

class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        List <string>list =new List<string>();
        int count=0;
        for(int i=0;i<S.Length;i++){
            if(S[i] == '+' || S[i] == '-'){
                list.Add(S.Substring(count,i-count));
                count=i;
            }else if(i ==S.Length-1){
                list.Add(S.Substring(count, i - count+ 1));
            }
        }
        int ans=0;
        foreach(string item in list){
            ans+=int.Parse(item);
        }
        Console.WriteLine(ans);
    }
}

巨大な数の足し算(繰り上がりなし)

問題文

using System;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray();
        string T =Console.ReadLine();
        char []t=T.ToCharArray();
        int []ans =new int [S.Length];
        for(int i=0;i<S.Length;i++){
            int ints=(int)Char.GetNumericValue(s[i]);
            int intt=(int)Char.GetNumericValue(t[i]);
            ans[i]=ints+intt;
        }
        foreach(var result in ans){
            Console.Write(result);
        }
    }
}

同じ桁数かつ繰り上がりがないので、出来る方法です。。
charをintに変換するのはint.Parse(s[i].ToString());で出来ます。。

巨大な数の足し算

問題文

using System;
using System.Linq;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray().Reverse().ToArray();
        string T =Console.ReadLine();
        char []t=T.ToCharArray().Reverse().ToArray();
        string ans="";
        int kuri =0;
        for(int i=0;i<S.Length;i++){
            int ints=int.Parse(s[i].ToString());
            int intt=int.Parse(t[i].ToString());
            int wa=ints+intt+kuri;
            kuri=wa/10;
            wa%=10;
            ans+=wa.ToString();
        }
        if(kuri !=0){
            ans+=kuri;
        }

        foreach(var result in ans.Reverse()){
            Console.Write(result);
        }
    }
}

巨大な数のかけ算

問題文

using System;
using System.Linq;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray().Reverse().ToArray();
        int t=int.Parse(Console.ReadLine());
        string ans="";
        int kuri=0;
        if(t==0 ||(s.Length == 1 && int.Parse(S) == 0)){
            Console.WriteLine("0");
            return;
        }
        
        for(int i=0;i<S.Length;i++){
            int ints=int.Parse(s[i].ToString());
            int seki =ints*t+kuri;
            kuri=seki/10;
            seki%=10;
            ans+=seki.ToString();
        }
        if(kuri !=0){
            ans+=kuri;
        }

        foreach(var result in ans.Reverse()){
            Console.Write(result);
        }

    }
}

またこちらのサイトを参考にさせていただきました。

1
1
2

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
1
1