A問題
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
n = int(input()) s = input() a=1000 b=1000 for i in range(len(s)): if s[i] == "a": a = i if abs(b-a)==1: print("Yes") exit() if s[i] == "b": b = i if abs(b-a)==1: print("Yes") exit() print("No") |
変数aと変数bは文字列a,bが出てきたときにそのインデックスを記録するために使う。
文字列aが出てきたときは変数bに記録しておいた値との差が1ならYesを出力する
文字列bが出てきたときに変数aに記録しておいた値との差が1ならYesを出力する
初めに思いついた解答だとACできず3回失敗した。変な解答だとは思いつつ、記録しておく。
B問題
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
b = int(input()) i = 1 #無限ループを実行 while True: #問題文の条件を満たす数字があればYes表示 if i**i == b: print(i) exit() #iのi乗がbを越えてしまった場合、問題文の条件を満たす数字はないのでNoを表示 elif i**i > b: print(-1) exit() #iのi乗がb未満の場合はiをインクリメントして次のループへ else: i += 1 |
C問題
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
A = [] for i in range(9): A.append(list(map(int, input().split()))) #print(A) #転置 A_T = list(map(list, zip(*A))) list_ = [1,2,3,4,5,6,7,8,9] #行 for i in range(9): list_ = [0,1,2,3,4,5,6,7,8,9] row = A[i] for j in row: list_[j] = 0 for k in list_: if k != 0: print("No") exit() #列 for i in range(9): list_ = [0,1,2,3,4,5,6,7,8,9] column = A_T[i] for j in column: list_[j] = 0 for k in list_: if k != 0: print("No") exit() #3*3マス #1 A_grid = [] for i in range(3): A_grid.append(A[i][0:3]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #2 A_grid = [] for i in range(3): A_grid.append(A[i][3:6]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #3 A_grid = [] for i in range(3): A_grid.append(A[i][6:9]) list_ = [0,1,2,3,4,5,6,7,8,9] #print(A_grid) for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #4 A_grid = [] for i in range(3,6): A_grid.append(A[i][0:3]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #5 A_grid = [] for i in range(3,6): A_grid.append(A[i][3:6]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #6 A_grid = [] for i in range(3,6): A_grid.append(A[i][6:9]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #7 A_grid = [] for i in range(6,9): A_grid.append(A[i][0:3]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #8 A_grid = [] for i in range(6,9): A_grid.append(A[i][3:6]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() #9 A_grid = [] for i in range(6,9): A_grid.append(A[i][6:9]) list_ = [0,1,2,3,4,5,6,7,8,9] for i in A_grid: list_[i[0]] = 0 list_[i[1]] = 0 list_[i[2]] = 0 for i in list_: if i != 0: print("No") exit() print("Yes") |
行、列、3×3マスのそれぞれで1~9までが1回ずつ出現するかをチェックし、2回以上出てきたらNoを表示して終了。
最後までNoが出なければYesを表示して終了する。
列を調べるときは行列を入れ替えてから調べた。
3×3マスの部分は9箇所をそれぞれ書いてしまった。もうちょっと良い方法あるだろと思いながら解くことを優先した。
補足・参考・感想
■記事一覧
コメント