1. Problem
2. Others' Solutions
import sys
def solution(n):
if n >= 7:
if sum(dwarf_arr) == 100: # 난쟁이가 7명인데 키의 합이 100이면 출력
for i in sorted(dwarf_arr) :
print(i)
exit()
else: # 아니면 계속해서 진행
return
for i in range(9):
if visited[i] == 1: # 해당 요소가 이미 순열의 요소면 다음 요소로 넘어감
continue
visited[i] = 1
dwarf_arr[n] = dwarfs[i] # n = 0~6 자리에 i 번째 난쟁이의 키를 저장
solution(n+1)
visited[i] = 0
dwarfs = [] # 9명의 난쟁이들의 키를 받을 리스트
dwarf_arr = [0] * 7 # 7명의 난쟁이를 선택했을 때의 리스트
visited = [0] * 9 # 해당 난쟁이를 선택했는지 여부를 설정하는 리스트
for _ in range(9): # 9명의 난쟁이들의 키를 입력 받음
dwarfs.append(int(sys.stdin.readline().rstrip()))
solution(0)
import sys
dwarfs = [] # 9명의 난쟁이들의 키를 받을 리스트
for _ in range(9): # 9명의 난쟁이들의 키를 입력 받음
dwarfs.append(int(sys.stdin.readline().rstrip()))
total = sum(dwarfs) # 9명의 난쟁이들의 키 누적합
dwarfs.sort()
for i in range(9):
for j in range(i+1,9):
if (total - dwarfs[i] - dwarfs[j]) == 100: # 2명의 난쟁이를 골라 키를 뺏을 때 100이면
for k in range(9):
if i == k or j == k: # 해당 2명의 난쟁이를 제외한 뒤 출력
continue
print(dwarfs[k])
exit()
3. Learned
1. Problem
2. My Solution
3. Others' Solutions
import sys
def check():
temp = 1
for i in range(n): # 행 판단
count = 1
for j in range(1,n):
if candy[i][j] == candy[i][j-1]:
count += 1
else:
count = 1
if count > temp:
temp = count
for j in range(n): # 열 판단
count = 1
for i in range(1,n):
if candy[i][j] == candy[i-1][j]:
count += 1
else:
count = 1
if count > temp:
temp = count
return temp
n = int(sys.stdin.readline().rstrip())
candy = []
result = 0
for _ in range(n):
candy.append(list(sys.stdin.readline().rstrip()))
for i in range(n): # 행 교환
for j in range(n):
if j + 1 < n: # 맨 끝 요소까지 갈 필요 없음
candy[i][j], candy[i][j+1] = candy[i][j+1], candy[i][j]
temp = check()
candy[i][j], candy[i][j+1] = candy[i][j+1], candy[i][j]
if temp > result:
result = temp
for j in range(n): # 열 교환
for i in range(n):
if i + 1 < n:
candy[i][j], candy[i+1][j] = candy[i+1][j], candy[i][j]
temp = check()
candy[i][j], candy[i+1][j] = candy[i+1][j], candy[i][j]
if temp > result:
result = temp
print(result)
또는
import sys
def check():
temp = 1
for i in range(n): # 행 판단
count = 1
for j in range(1,n):
if candy[i][j] == candy[i][j-1]:
count += 1
else:
count = 1
if count > temp:
temp = count
count = 1
for j in range(1,n):
if candy[j][i] == candy[j-1][i]:
count += 1
else:
count = 1
if count > temp:
temp = count
return temp
n = int(sys.stdin.readline().rstrip())
candy = []
result = 0
for _ in range(n):
candy.append(list(sys.stdin.readline().rstrip()))
for i in range(n): # 행 교환
for j in range(n):
if j + 1 < n: # 맨 끝 요소까지 갈 필요 없음
candy[i][j], candy[i][j+1] = candy[i][j+1], candy[i][j]
temp = check()
candy[i][j], candy[i][j+1] = candy[i][j+1], candy[i][j]
if temp > result:
result = temp
if i + 1 < n:
candy[i][j], candy[i+1][j] = candy[i+1][j], candy[i][j]
temp = check()
candy[i][j], candy[i+1][j] = candy[i+1][j], candy[i][j]
if temp > result:
result = temp
print(result)
4. Learned
test =[["abc"],["abc"]]
print(test[0][0][1])
# 결과 -> b
print(test[0][1][1])
# 결과 -> out of index
test = ["abc", "abc"]
print(test[0][1])
# 결과 -> b
1. Problem
2. My Solution
import sys
esm = list(map(int,sys.stdin.readline().rstrip().split()))
temp = [1,1,1]
year = 1
while(True):
if esm == temp:
print(year)
break
else:
temp[0] = (temp[0]+1) % 16
temp[1] = (temp[1]+1) % 29
temp[2] = (temp[2]+1) % 20
for i in range(3):
if temp[i] == 0:
temp[i] = 1
year += 1
3. Others' Solutions
e, s, m = map(int,sys.stdin.readline().rstrip().split())
e, s, m = e % 15, s % 28, m % 19
year = 1
while True:
if year % 15 == e and year % 28 == s and year % 19 == m:
print(year)
break
year += 1
1. Problem
2. My Solution
import sys
def permutation(level, length, arr): # 고장나지 않은 버튼으로 만들 수 있는 조합생성
if level >= length:
result.append(int(''.join(map(str,arr))))
else:
for i in range(10):
if button[i] == False: # 고장난 버튼은 제외
continue
arr[level] = i
permutation(level+1, length, arr)
channel = int(sys.stdin.readline().rstrip()) # 목표하는 채널
n = int(sys.stdin.readline().rstrip()) # 고장난 버튼의 수
button = [True] * 10
if n != 0:
not_working = list(map(int,sys.stdin.readline().rstrip().split())) # 고장난 버튼 입력 받음
for i in not_working: # 고장난 버튼은 False로 처리
button[i] = False
ch_len = len(str(channel)) # 목표하는 채널의 자리수
result = [] # 고장나지 않은 버튼으로 만들 수 있는 조합
if ch_len != 1:
arr_1 = [0] * (ch_len - 1)
permutation(0, ch_len - 1, arr_1)
arr_2 = [0] * (ch_len)
permutation(0, ch_len, arr_2)
if ch_len != 6:
arr_3 = [0] * (ch_len + 1)
permutation(0, ch_len + 1, arr_3)
count = abs(channel - 100) # + - 버튼으로만 움직였을 때의 count
for i in result: # 조합 중에서 목표하는 채널과 가장 가까운 채널까지의 버튼 수와 + - 버튼 수
if abs(channel - i) + len(str(i)) < count:
count = abs(channel - i) + len(str(i))
if channel == 100:
print(0)
else:
print(count)
3. Others' Solutions
import sys
channel = int(sys.stdin.readline().rstrip())
result = abs(100 - channel)
n = int(sys.stdin.readline().rstrip())
if n:
button = set(input().split())
# list(map(int,sys.stdin.readline().rstrip().split()))
else:
button = []
for num in range(1000001):
for i in str(num):
if i in button: # list -> int(i)
break
else:
result = min(result, len(str(num)) + abs(num - channel))
print(result)
4. Learned
for - else 구문
- for 반복문이 break 등으로 중단되지 않았을 경우 수행되는 else 문
문제에 주어진 테스트 케이스는 핵심 및 대표적인 경우임, 여기서 예외적인 테스트 케이스 등을 파악해서 버그를 잡도록 하는 것이 중요
1 2 3 4 숫자로 만들 수 있는 모든 조합을 생각해볼 때, 조합 알고리즘도 가능하지만 0 ~ 4321 까지 모든 수를 각각 1,2,3,4 숫자로 만들 수 있는 지 판단해도 됨