1970 쉬운 거스름돈
지불할 수 있는 돈의 종류(option)들을 순회하면서, 최대한 낼 수 있는 개수만큼 쓰고 다음 단위(더 작은 지불 단위 옵션)으로 넘어가게 해서 풀 수 있음
options = [50000,10000,5000,1000,500,100,50,10]
for tc in range(int(input())):
N = int(input())
cnt = [0]*8
for i in range(8):
if N != 0:
cnt[i] += N//options[i]
N %= options[i]
else:
break
print("#{}\n{}".format(tc+1, " ".join(map(str,cnt))))
1966 숫자를 정렬하자
방법 1 - sort 함수 사용
방법 2 - 개수를 세어나갈 카운트 배열을 활용해, 개수만큼 숫자를 출력
# 방법 1
for tc in range(int(input())):
N = int(input())
numbers = list(map(int, input().split()))
print("#{} {}".format(tc+1, " ".join(map(str,sorted(numbers)))))
# 방법 2
for tc in range(int(input())):
N = int(input())
numbers = list(map(int, input().split()))
cnt = [0]*(max(numbers)+1)
for num in numbers:
cnt[num] +=1
print("#{}".format(tc+1),end="")
for i in range(len(cnt)):
if cnt[i] > 0:
for _ in range(cnt[i]):
print(" {}".format(i),end="")
print()
참고) 버블정렬으로 구현하면?
T = int(input())
for tc in range(T):
a = int(input())
b = list(map(int, input().split()))
for i in range(len(b) - 1, 0, -1):
for j in range(0, i):
if b[j] > b[j + 1]:
b[j], b[j + 1] = b[j + 1], b[j]
print('#{} {}'.format((tc + 1), ' '.join(map(str, b))))
1961 숫자 배열 회전
접근 - 배열이 들어오면, 그 배열을 90도로 회전한 결과를 리턴시켜주는 함수를 만들어서 총 3번 회전시킨다
def change(li):
n = len(li)
new = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
new[i][j] = li[n-1-j][i]
return new
for tc in range(int(input())):
N = int(input())
matrix = [list(map(int, input().split())) for _ in range(N)]
result = [['']*N for _ in range(N)]
change_90 = change(matrix)
change_180 = change(change_90)
change_270 = change(change_180)
for i in range(N):
result[i][0] = "".join(map(str,change_90[i]))
result[i][1] = "".join(map(str,change_180[i]))
result[i][2] = "".join(map(str,change_270[i]))
print("#{}".format(tc+1))
for row in result:
print(' '.join(row))
예전에 처음 풀었을때는 시간이 좀 있어서 규칙을 찾아 풀이했었다
for tc in range(int(input())):
n = int(input())
p = [list(map(int, input().split())) for _ in range(n)]
r = [[0]*3 for _ in range(n)]
for i in range(n):
num1 = ''
for j in range(n-1,-1,-1):
num1 += str(p[j][i])
r[i][0] = num1
num2 = ''
for k in range(n-1,-1,-1):
num2 += str(p[n-i-1][k])
r[i][1] = num2
num3 = ''
for l in range(n):
num3 += str(p[l][n-i-1])
r[i][2] = num3
print("#{}".format(tc+1))
for rr in r:
print(" ".join(map(str, rr)))
1959 두 개의 숫자열
접근 - 더 긴 배열과 짧은 배열을 찾고, ((긴 배열 원소 수) -(짧은 배열 원소 수) +1) 만큼 이동하면서 최대값 나오면 갱신
for tc in range(int(input())):
N,M = map(int, input().split())
li = [list(map(int, input().split())) for _ in range(2)]
max_value = float("-inf")
if N > M: # 이게 싫으면, 함수로 만들어서
small,big = li[1],li[0]
else:
small,big = li[0],li[1]
for i in range(len(big)-len(small)+1):
tmp = 0
for j in range(len(small)):
tmp += small[j]*big[j+i]
if tmp > max_value: # 매번 비교해주거나 빈리스트에 담아서 max만 출력해도
max_value = tmp
print("#{} {}".format(tc+1, max_value))
코드가 좀 복잡하다 싶으면 다음처럼 함수로 구현하는 것도 방법
def cal(l,s): # 긴 배열, 짧은 배열 순으로 들어온다
maxV=0
j=0
while j<len(l)-len(s)+1:
cnt = 0
for i in range(len(s)):
cnt += s[i]*l[i+j]
if cnt > maxV:
maxV = cnt
j += 1
return maxV
for tc in range(int(input())):
N,M=map(int, input().split())
a=list(map(int, input().split()))
b=list(map(int, input().split()))
if N>M:
print("#{} {}".format(tc+1,cal(a, b)))
else:
print("#{} {}".format(tc+1,cal(b,a)))
'Problem Solving > SWEA' 카테고리의 다른 글
[ SWEA ] D2 - 1940, 1928, 1288, 1284, 1204 - python 문제풀이 (0) | 2021.06.28 |
---|---|
[ SWEA ] D2 - 1954, 1948, 1946, 1945 - python 문제풀이 (0) | 2021.06.27 |
[ SWEA ] D2 - 1983, 1979, 1976, 1974 - python 문제풀이 (0) | 2021.06.24 |
[ SWEA ] D2 - 2001, 1989, 1986, 1984 - python 문제풀이 (0) | 2021.06.24 |
[ SWEA ] D2 - 1859, 1926, 2007, 2005 - python 문제풀이 (0) | 2021.06.24 |
댓글