LoginSignup
0
1

More than 3 years have passed since last update.

はじめてのプロコンメモ(その2)

Posted at

Python3で挑むにあたり忘れないようにメモ書きを残しておく
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~
を類題も含めてといた記録のメモ

標準入力例

# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

練習1

ABC 081 A - Placing Marbles

問題

すぬけ君は1,2,3の番号がついた 
3つのマスからなるマス目を持っています。 各マスには 0 か 1 が書かれており、マス iには siが書かれています。

すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。

解答

今回の標準入力の入力例は101だったので一文字ずつ区切るようにした


#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい['1', '0', '1']
#文字列1とあっている配列の数をとりだしている
print(chars.count('1'))

練習2

ABC 095 A - Something on It

問題

ラーメン店「高橋屋」のラーメンの値段は 
1杯 700円ですが、トッピング(味玉、チャーシュー、ねぎ)を乗せた場合は 1種類につき 
100円が加算されます。

ある客がラーメンを一杯注文し、店員にトッピングの希望を伝えました。店員は注文の内容をメモ帳に文字列 Sとして記録しました。
Sの長さは3文字で、Sの 1文字目が o のとき客のラーメンに味玉を乗せることを、x のとき味玉を乗せないことを表します。同様に、
Sの2文字目、3文字目はそれぞれチャーシュー、ねぎの有無を表します。
Sが入力されると、対応するラーメンの値段を出力するプログラムを書いてください。

解答


#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい['o', 'x', 'o']
#文字列1とあっている配列の数をとりだしている
print(700+chars.count('o')*100)

練習3

ABC 085 A - Already 2018

問題

2018年 1月某日、高木さんは書類を書いています。書類には、その日の日付を yyyy/mm/dd という形式で書き込む欄があります。例えば、2018年 1月23日は 2018/01/23 となります。

書類を書き終えたあと、高木さんは日付欄の先頭に誤って 2017 と書いてしまっていたことに気がつきました。高木さんが日付欄に書いた文字列 Sを入力すると、Sの先頭の 
4文字を 2018 に修正して出力するプログラムを書いてください。

解答

#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい[2017/01/07]
#['2', '0', '1', '7', '/', '0', '1', '/', '0', '7']
# 文字を入れ替える
chars[3]="8"

# 文字を出力する
for s in chars:
  # スペーサーをなしに設定
  print(s, end ="")
  #2018/01/07出力させる

参考文献

pythonでリストを普通の文字列に直す時どうしようかなとおもった
https://teratail.com/questions/135327

練習4

ABC 069 B - i18n

問題

internationalization という英単語は、i18n と略されることがあります。 これは、先頭文字 i と末尾文字 n の間に 18文字が挟まっていることに由来します。
長さ 3以上の英小文字のみからなる文字列 
sが与えられます。 同様の規則によって sを略してください。

解答


#一文字ずつ区切る
chars = list(input())
#文字列で入っているぽい[internationalization]
#len(chars)で文字の長さを数える
#最初の文字と真ん中の数と最後の文字を出力させる
#strでInt型をStringに変換する
print(chars[0]+str(len(chars)-2)+chars[len(chars)-1])

練習5

ABC 082 B - Two Anagrams

問題

英小文字のみからなる文字列 s, tが与えられます。 あなたは、
sの文字を好きな順に並べ替え、文字列 s′を作ります。 また、
tの文字を好きな順に並べ替え、文字列 
t′を作ります。 このとき、辞書順で 
s′<t′となるようにできるか判定してください。

解答(自力で解けなかった)


#数を数える
count = 0
#一文字ずつ区切る
chars1 = list(input())
chars2 = list(input())

#短いやつをソートする
if len(chars1) < len(chars2):
    print("len(chars1) < len(chars2)")
    #辞書順にソートする
    #print(sorted(chars1))
    # ソートしたやつを短い方と一文字ずつ比較する
    for sorted_char1 in sorted(chars1):
        #print(sorted_char1)
        # chars1にまわしている文字よりも辞書順逆に回す
        for reversed_chars2 in reversed(chars2):
            #もし逆の辞書で回したのと比較して小さければ
            if sorted_char1 <= reversed_chars2:
                #回数を数える
                count = count+1
                #その数と短いの方の長さを比較して、すべて比較していたら
                if count == len(chars1):
                    #Yesを表示
                    print("Yes")
    #おわりはsorted_char1 <= reversed_chars2にならなかったやつと、長いやつを比較する
    if count != len(chars2):
        print("No")

#len(chars1) < len(chars2)ではなかった場合
else:
    print("len(chars1) > len(chars2)")
    #辞書順にソートする
    # ソートしたやつを短い方と一文字ずつ比較する
    for sorted_char2 in sorted(chars2):
        # chars2にまわしている文字よりも辞書順逆に回す
        for reversed_chars1 in reversed(chars1):
            #もし逆の辞書で回したのと比較して小さければ
            print("テスト")
            print(sorted_char2)
            print(reversed_chars1)
            if sorted_char2 <= reversed_chars1:
                #回数を数える
                count = count+1
                print("回数を数える")
                print(count)
                print(len(chars2))
                #その数と短いの方の長さを比較して、すべて比較していたら
                if count == len(chars2):
                    #Yesを表示
                    print("Yes")
    #おわりはsorted_char1 <= reversed_chars2にならなかったやつと、長いやつを比較する
    if count != len(chars1):
        print("No")

回答例

s = input()
s_asc = ''.join(sorted(s))

t = input()
t_desc = ''.join(sorted(t, reverse=True))

if s_asc < t_desc:
    print('Yes')
else:
    print('No')

課題

なぜできなかったのか

  • 難しく考えすぎてしまった
  • join関数を知らなかった
    • たったの一行で連結させることが可能
    • join関数は、”.join(リスト名)で使える。
    • しかもソートさせたやつを入れるだけでいい

できていたこと

  • 文字列の長さで分岐させるを考えられたのは良かった
0
1
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
1