teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

コード変更

2018/09/19 09:56

投稿

zeitaku_fire
zeitaku_fire

スコア26

title CHANGED
File without changes
body CHANGED
File without changes

3

コード変更

2018/09/19 09:56

投稿

zeitaku_fire
zeitaku_fire

スコア26

title CHANGED
File without changes
body CHANGED
@@ -153,4 +153,32 @@
153
153
 
154
154
  print(cou)
155
155
 
156
+ ```
157
+
158
+ 【コード完成】
159
+ ```python
160
+ n,high = map(int,input().split())
161
+ li = list(map(int,input().split()))
162
+ max_li = max(li)
163
+ li = [i for i in li if i + max_li >= high] # 一番高い雪を足しても、高さが満たさない雪だまは削除
164
+ li = sorted(li)
165
+ cou = 0
166
+ ind_max = len(li)-1 # 5
167
+ ind_min = 0
168
+
169
+ while li:
170
+ obj = 0
171
+ value = high - li[ind_max] #value値以上の最小を見つける
172
+ for i in range(ind_min,ind_max):
173
+ if li[i] >= value : #見つかった。
174
+ obj = li[i]
175
+ break
176
+ if obj == 0: #見つからなかった。
177
+ break
178
+ else: #見つかった
179
+ cou +=1
180
+ ind_max -=1
181
+ ind_min = i +1
182
+
183
+ print(cou)
156
184
  ```

2

コード変更

2018/09/19 09:55

投稿

zeitaku_fire
zeitaku_fire

スコア26

title CHANGED
File without changes
body CHANGED
@@ -123,4 +123,34 @@
123
123
  del li[-1]
124
124
  del li[:line+1]
125
125
  print(cou)
126
+ ```
127
+
128
+ 【再追記】
129
+ ご教授いただいた点を考慮。
130
+ コード再作成。
131
+ ```python
132
+ high = 8
133
+ li = [4,6,5,1,5,3]
134
+ li = [i for i in li if i + max(li) >= high] # 一番高い数値を足しても、規定値を満たさない値は、事前に削除
135
+ li = sorted(li)
136
+ cou = 0
137
+ ind_max = len(li)-1
138
+ ind_min = 0
139
+
140
+ while li:
141
+ obj = 0
142
+ value = high - li[ind_max] #value値以上の最小を見つける
143
+ for i in range(ind_min,ind_max):
144
+ if li[i] >= value : #見つかった。
145
+ obj = li[i]
146
+ break
147
+ if obj == 0: #見つからなかった。
148
+ break
149
+ else: #見つかった
150
+ cou +=1
151
+ ind_max -=1
152
+ ind_min = i +1 #リストの値を削除するのではなく、移動
153
+
154
+ print(cou)
155
+
126
156
  ```

1

ご解答頂いた内容を反映

2018/09/19 08:54

投稿

zeitaku_fire
zeitaku_fire

スコア26

title CHANGED
File without changes
body CHANGED
@@ -95,4 +95,32 @@
95
95
 
96
96
  Pythonを使う前提で、上記のゴールを達成するできるだけ速いコードの書き方を提案してもらえないでしょうか。
97
97
 
98
- どうぞよろしくお願いします。
98
+ どうぞよろしくお願いします。
99
+
100
+
101
+ 【追記】
102
+ ご解答頂いた内容でコード作成しました。
103
+ 速度は少し改善できました。ありがとうございます。
104
+ しかし、TLEはおきてしまっています。
105
+ ```python
106
+ high = 8
107
+ li = [4,6,5,1,5,3]
108
+ li = [i for i in li if i + max(li) >= high] # 一番高い数値を足しても、規定値を満たさない値は、事前に削除
109
+ li = sorted(li)
110
+ cou = 0
111
+
112
+ while li:
113
+ obj = 0
114
+ value = high - li[-1] #value値以上の最小を見つける
115
+ for line,i in enumerate(li):
116
+ if i >= value and line+1 < len(li): #後半の条件は、末尾でないということ
117
+ obj = li[line] #見つかった。
118
+ break
119
+ if obj == 0: #見つからなかった。
120
+ break
121
+ else:
122
+ cou +=1
123
+ del li[-1]
124
+ del li[:line+1]
125
+ print(cou)
126
+ ```