大家好!我最近研究了python中的算法问题,我做了一个问题,我想知道如何改进它?(可能有更多解释)。
Gosha 和 Timofey 找到了一个不寻常的快速打字模拟器,并想掌握它。模拟器是一个 4x4 键的字段,其中每轮出现数字和点的配置。键上写有一个点或从 1 到 9 的数字。在时间 t,玩家必须同时按下写有数字 t 的所有键。Gosha 和 Timofey 可以同时按 k 个键。如果在时间 t 按下了所有必要的键,则玩家获得 1 分。找出如果 Gosha 和 Timofey 一起按键可以赚取的点数。
输入格式
第一行包含一个整数 k (1 ≤ k ≤ 5)。在接下来的四行中,指定了模拟器的类型 - 每行 4 个字符。每个字符可以是一个点,也可以是从 1 到 9 的数字。同一行中的字符是连续的,并且没有空格分隔。
输出格式
打印单个数字,Gosha 和 Timofey 可以获得的最大点数。
示例 1:
输入:
3
1231
2..2
2..2
2..2
结论:
2
示例 2:
输入:
4
1111
9999
1111
9911
结论:
1
示例 3:
输入:
4
1111
1111
1111
1111
结论:
0
时间限制 - 1 秒 | 内存限制 - 64mb
我的版本:
k = int(input()) * 2 #Эти 2 части перенести в if __name__ == "__main__" и сделать def "snake_case"
matrix = []
for i in range(4):
numbers = input()
matrix += numbers
t = 1
score = 0
while t <= 9:
count_t = matrix.count(str(t))
if 0 < count_t <= k:
score += 1 #Тут была идея сделать функцию sum() с условием, чтобы избавиться от лишних строк, но не знаю, нужно это или нет
t += 1
print(score)
你的决定没问题。唯一不好的地方:
matrix += numbers。该操作员一遍又一遍地复制列表,这可能会导致速度变慢。但是这里只有四次迭代。放缓不会很明显。可以在更大的pythonicity方向上修改解决方案。
来自矩阵的另一个字符输入。
collections.Counter- 用于计算矩阵中字符的特殊字典。字典迭代。我们只处理矩阵中的那些数字。
sum用而不是求和score += 1。编码:
您运行您的列表 9 次。最好这样做:
您会得到一个字典,其中包含所有数字(键)以及它们在列表中出现的次数(值)。
我也在学习,想分享我的解决方案。我不知道这在时间和内存上会花费多少。
下面是代码的第二个版本。在这两种情况下,我都被告知它可以更优化。