에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(001 - 004 전탐색:전열거)
1. 목적
초중급자가 풀어야 할 과거문정선 100문을 파이썬으로 푸십시오.
모두 풀이 끝날 무렵에 하늘색이 되어 있는 것이 목표입니다.
이 기사는 "001 - 004 전체 탐색 : 전체 열거"입니다.
2. 총괄
파이썬에서는 조합의 열거 등은 itertools
하지만 할 수 있지만, 연습을 위해 for문으로 썼다.
특히 넘어지지는 않았다.
3. 본편
001 - 004 전체 탐색 : 전체 열거
001. ITP1_7_B - How Many Ways?
답변
answer_list = []
while True:
n, x = map(int, input().split())
if n == 0 and x == 0:
break
count = 0
for first in range(1, n + 1):
for second in range(first + 1, n + 1):
for third in range(second + 1, n + 1):
if first + second + third == x:
count += 1
answer_list.append(count)
for answer in answer_list:
print(answer)
문제문은 중복 없음이므로, for문의 first
, second
, third
의 범위가 중복되지 않게 주의합니다.
구체적으로는 second
의 스타트를 first+1
, third
의 스타트를 second+1
로 합니다.
002. AtCoder Beginner Contest 106 B - 105
답변
def is_target(num):
count = 0
for i in range(1, num+1):
if num % i == 0:
count += 1
if count == 8:
return True
else:
return False
if __name__ == "__main__":
N = int(input())
count = 0
for num in range(1, N+1, 2):
count += is_target(num)
print(count)
약수가 8인지 아닌지를 True
, False
로 돌려주는 is_target
라는 함수를 작성합니다.
그 후 1~N까지의 홀수에 대해 is_target
로 체크해 더해 줍니다(True는 1이므로 그대로 더할 수 있다).
003. AtCoder Beginner Contest 122 B - ATCoder
답변
target = 'ACGT'
S = input()
answer = 0
for start in range(len(S)):
if S[start] not in target:
continue
count = 0
for end in range(start, len(S)):
if S[end] not in target:
break
count += 1
answer = max(answer, count)
print(answer)
문자열 S에서 꺼내는 부분 문자열은 첨자 start
와 end
를 사용하여 S[start : end]
갑니다.
체크 시에는 start
의 for문에서는 end
가 아닌 경우는 ACGT
, start
의 for문에서는 ACGT
004.파 연배 2019 C - 노래방
답변
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
answer = 0
for song1 in range(M):
for song2 in range(song1+1, M):
score = 0
for i in range(N):
score += max(A[i][song1], A[i][song2])
answer = max(answer, score)
print(answer)
continue
및 end
에 대한 for문을 돌립니다.
그리고 그 안쪽에서 각 학생(첨자 ACGT
)에 대해 break
와 song1
의 큰 쪽의 점수를 채용합니다.
Reference
이 문제에 관하여(에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(001 - 004 전탐색:전열거)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/aef0d90f8b1f134ae16b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
파이썬에서는 조합의 열거 등은
itertools
하지만 할 수 있지만, 연습을 위해 for문으로 썼다.특히 넘어지지는 않았다.
3. 본편
001 - 004 전체 탐색 : 전체 열거
001. ITP1_7_B - How Many Ways?
답변
answer_list = []
while True:
n, x = map(int, input().split())
if n == 0 and x == 0:
break
count = 0
for first in range(1, n + 1):
for second in range(first + 1, n + 1):
for third in range(second + 1, n + 1):
if first + second + third == x:
count += 1
answer_list.append(count)
for answer in answer_list:
print(answer)
문제문은 중복 없음이므로, for문의 first
, second
, third
의 범위가 중복되지 않게 주의합니다.
구체적으로는 second
의 스타트를 first+1
, third
의 스타트를 second+1
로 합니다.
002. AtCoder Beginner Contest 106 B - 105
답변
def is_target(num):
count = 0
for i in range(1, num+1):
if num % i == 0:
count += 1
if count == 8:
return True
else:
return False
if __name__ == "__main__":
N = int(input())
count = 0
for num in range(1, N+1, 2):
count += is_target(num)
print(count)
약수가 8인지 아닌지를 True
, False
로 돌려주는 is_target
라는 함수를 작성합니다.
그 후 1~N까지의 홀수에 대해 is_target
로 체크해 더해 줍니다(True는 1이므로 그대로 더할 수 있다).
003. AtCoder Beginner Contest 122 B - ATCoder
답변
target = 'ACGT'
S = input()
answer = 0
for start in range(len(S)):
if S[start] not in target:
continue
count = 0
for end in range(start, len(S)):
if S[end] not in target:
break
count += 1
answer = max(answer, count)
print(answer)
문자열 S에서 꺼내는 부분 문자열은 첨자 start
와 end
를 사용하여 S[start : end]
갑니다.
체크 시에는 start
의 for문에서는 end
가 아닌 경우는 ACGT
, start
의 for문에서는 ACGT
004.파 연배 2019 C - 노래방
답변
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
answer = 0
for song1 in range(M):
for song2 in range(song1+1, M):
score = 0
for i in range(N):
score += max(A[i][song1], A[i][song2])
answer = max(answer, score)
print(answer)
continue
및 end
에 대한 for문을 돌립니다.
그리고 그 안쪽에서 각 학생(첨자 ACGT
)에 대해 break
와 song1
의 큰 쪽의 점수를 채용합니다.
Reference
이 문제에 관하여(에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(001 - 004 전탐색:전열거)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/K_SIO/items/aef0d90f8b1f134ae16b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
answer_list = []
while True:
n, x = map(int, input().split())
if n == 0 and x == 0:
break
count = 0
for first in range(1, n + 1):
for second in range(first + 1, n + 1):
for third in range(second + 1, n + 1):
if first + second + third == x:
count += 1
answer_list.append(count)
for answer in answer_list:
print(answer)
def is_target(num):
count = 0
for i in range(1, num+1):
if num % i == 0:
count += 1
if count == 8:
return True
else:
return False
if __name__ == "__main__":
N = int(input())
count = 0
for num in range(1, N+1, 2):
count += is_target(num)
print(count)
target = 'ACGT'
S = input()
answer = 0
for start in range(len(S)):
if S[start] not in target:
continue
count = 0
for end in range(start, len(S)):
if S[end] not in target:
break
count += 1
answer = max(answer, count)
print(answer)
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
answer = 0
for song1 in range(M):
for song2 in range(song1+1, M):
score = 0
for i in range(N):
score += max(A[i][song1], A[i][song2])
answer = max(answer, score)
print(answer)
Reference
이 문제에 관하여(에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(001 - 004 전탐색:전열거)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/K_SIO/items/aef0d90f8b1f134ae16b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)