신고 결과 받기
그대로 구현하면 됩니다.
k진수에서 소수 개수 구하기
문제에서 주어진대로 n을 k진수로 변환하고 0과 0사이의 수가 소수인지 판별하면 됩니다.
python에서 int(), bin() 등과 같이 k진수법으로 표현된 수를 10진수로 변환하는 함수는 있지만 10진수를 k진법으로 표현하는 함수는 없으므로 직접 구현해야 합니다. 변환하는 방법은 10진수를 2진수로 바꾸는 방법처럼 계속 나눠 나머지를 뒤에 추가하여 구현할 수 있습니다.
def conv(n,k):
base = ''
while n > 0:
n, mod = divmod(n, q)
base += str(mod)
return base[::-1]
"""
tc1 : n = 437674, k = 3
------------------------------------------
n = 145891 | mod = 1 | base = 1
n = 48630 | mod = 1 | base = 11
n = 16210 | mod = 0 | base = 110
n = 5403 | mod = 1 | base = 1101
n = 1801 | mod = 0 | base = 11010
n = 600 | mod = 1 | base = 110101
n = 200 | mod = 0 | base = 1101010
n = 66 | mod = 2 | base = 11010102
n = 22 | mod = 0 | base = 110101020
n = 7 | mod = 1 | base = 1101010201
n = 2 | mod = 1 | base = 11010102011
n = 0 | mod = 2 | base = 110101020112
------------------------------------------
return : 211020101011
"""
주차 요금 계산
"시:분" 형태를 "분"단위로 변환하여 문제를 해결하면 됩니다.
양궁대회
dfs나 bfs를 사용하여 가능한 수를 탐색하면 됩니다. 대신 +1씩 탐색하면 시간초과를 발생시키므로 각 점수마다 라이언이 이기거나(info + 1) 지는(0) 경우로 탐색해야 합니다.
양과 늑대
현재 양과 늑대의 수에 대해 다음에 방문할 수 있는 곳과 이미 방문한 곳을 저장하여 dfs로 탐색하면 됩니다.
파괴되지 않은 건물
카카오 블로그에 설명이 잘 되어 있습니다.
누적합을 이용하는 문제입니다. 예를들면 (4,4) 공간에서 (0,0)부터 (2,2)까지 n의 값을 더하고자 할 때 (0,0)과 (2,2)는 n, (0,2)와 (2,0)에는 -n을 더하고 오른쪽, 아래로 누적합하여 해결할 수 있습니다.
n 0 0 -n
0 0 0 0
0 0 0 0
-n 0 0 n
# 오른쪽으로 누적합
n n n 0
0 0 0 0
0 0 0 0
-n -n -n 0
# 아래로 누적합
n n n 0
n n n 0
n n n 0
0 0 0 0
사라지는 발판
A와 B는 항상 게임에 최선을 합니다.
만약, 내가 이긴다면 최소한의 이동횟수로 이기고 싶고 내가 진다면 최대한의 이동횟수로 지려고 합니다.
A가 이동하는 함수 A와 B가 이동하는 함수 B를 선언하여 자신이 이동 후 상대방을 호출하는 과정으로 탐색합니다. 각각의 함수는 현재 보드 상태와 서로의 위치, 이동 횟수를 입력받고 자신이 이겼는지 졌는지와 이동 횟수를 반환합니다.
예를들면, A 함수에서 A가 이동한 뒤 상대방을 이동시키기 위해 B 함수를 호출합니다. B 함수는 B의 승패와 이동 횟수를 리턴하게 됩니다.
위의 조건에 따라 A가 이겼을 때(B가 졌을 때)는 리턴받은 이동 횟수들 중 가장 적은 것을 리턴하고 A가 졌을 때(B가 이겼을 때)는 리턴받은 이동 횟수들 중 가장 큰 것을 리턴합니다. 만약 자신이 이길 수 있는 경우라면 무조건 이기는 경우를 리턴합니다.