# 1. 회문 문자열 검사
N = 5
strArr = ['level', 'moon', 'abcba', 'soon', 'gooG']
for idx in range(len(strArr)):
str = strArr[idx].upper() # 대문자 변환
size = len(str)
flag = True
# print(str[-1]) 문자의 맨 뒤에 출력
for j in range(size//2):
if str[j] != str[-1-j]: # size-j-1
flag = False
break
if flag:
print("#%d YES" % (idx+1))
else:
print("#%d NO" % (idx+1))
# 2. 숫자만 추출
strArr = 'g0en2Ts8eSoft'
res = 0
for str in strArr:
if str.isdecimal(): # 숫자만 isdecimal
res = res*10 + int(str)
print(res)
# 3. 카드 역배치
order = [[5, 10], [9, 13], [1, 2], [3, 4], [5, 6],
[1, 2], [3, 4], [5, 6], [1, 20], [1, 20]]
# 0 ~ 20 배열(21 size) 생성
arr = list(range(21))
for i in range(len(order)):
s = order[i][0]
e = order[i][1]
for j in range((e-s+1)//2): # 교환하는 수 만큼 돌기
arr[s+j], arr[e-j] = arr[e-j], arr[s+j] # 서로 교환하기
arr.pop(0) # 0 없애주기
print(arr)
# 4. 두 리스트 합치기 : 두 졍렬 리스트를 오름차순으로 합치기
n = 3
arrA = [1, 3, 5]
m = 5
arrB = [2, 3, 6, 7, 9]
p1 = p2 = 0
res = []
while p1 < n and p2 < m:
if arrA[p1] <= arrB[p2]:
res.append(arrA[p1])
p1 = p1 + 1
else:
res.append(arrB[p2])
p2 = p2 + 1
# 남은 배열 추가해주기
if p1 < n:
res = res + arrA[p1:]
if p2 < m:
res = res + arrB[p2:]
# 출력
for i in res:
print(i, end=' ')
- 5. 수의 합
- 수열에서 m이 되는 경우의 수 구하기
# 5. 수의 합
N, M = 8, 3
list = [1,2,1,3,1,1,1,2]
lt = rt = 0
sum = cnt = 0
while True:
if sum < M:
if rt < N:
sum = sum + list[rt]
rt = rt + 1
else:
break
elif sum == M:
cnt = cnt + 1
sum = sum - list[lt]
lt = lt + 1
else:
sum = sum - list[lt]
lt = lt + 1
print(cnt)
# 6. 격자판 최대합
arr = [
[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19]]
sum1 = sum2 = sum3 = sum4 = 0
max = 0
# 행과 열의 최대합
for i in range(len(arr)):
sum1 = sum2 = 0
for j in range(len(arr)):
sum1 = sum1 + arr[i][j]
sum2 = sum2 + arr[j][i]
if max < sum1:
max = sum1
if max < sum2:
max = sum2
# 대각선 최대합
for i in range(len(arr)):
sum3 = sum3 + arr[i][i]
sum4 = sum4 + arr[i][len(arr)-i-1]
if max < sum3:
max = sum3
if max < sum4:
max = sum4
print(max)
# 7. 사과나무 - 격자판의 값들 총합
N = 5
arr = [
[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19]]
size = N//2
start = end = size
res = 0
for i in range(len(arr)):
for j in range(start, end+1):
# print(arr[i][j], end=' ')
res = res + arr[i][j]
if i < size:
start = start-1
end = end+1
else:
start = start+1
end = end-1
print(res)
# 8. 곶감(모래시계)
N = 5
arr = [
[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19]]
M = 3
order = [[2, 0, 3], [5, 1, 2], [3, 1, 4]]
# 행, 0(왼쪽) or 1(오른쪽), 회전하는 수
# 각자의 행 이동시키기
for o in range(len(order)):
row = order[o][0]
direction = order[o][1]
move = order[o][2]
if direction == 0: # 왼쪽으로 이동
for _ in range(move):
# 맨 앞의 원소 맨 뒤에 넣기
arr[row-1].append(arr[row-1].pop(0))
elif direction == 1: # 오른쪽으로 이동
for _ in range(move):
# 맨 뒤의 원소 맨 앞에 넣기
arr[row-1].insert(0, arr[row-1].pop())
# 모래시계 모양 원소들을 더해서 출력
size = N//2
start = 0
end = N-1
sum = 0
for i in range(N):
for j in range(start, end+1):
sum = sum + arr[i][j]
#print(arr[i][j], end=' ')
if i < size:
start = start + 1
end = end - 1
else:
start = start - 1
end = end + 1
print(sum)
# 9. 봉우리
# 각 격자 판의 숫자 중 자신의 상하좌우보다 큰 숫자가 봉우리
# 봉우리 지역이 몇 개 있는지 알아내기
# 격자는 0으로 초기화
N = 5
arr = [
[5,3,7,2,3],
[3,7,1,6,1],
[7,2,5,3,4],
[4,3,6,4,1],
[8,7,3,5,2]]
arr.insert(0, [0]*N) # 맨 위에 0으로 초기화
arr.append([0]*N) # 맨 밑에 0으로 초기화
for x in arr:
x.insert(0,0) # 맨 왼쪽 행에 0
x.append(0) # 맨 오른쪽 행에 0
# 동서남북
dx = [-1,0,1,0]
dy = [0,1,0,-1]
count = 0
for i in range(1, N+1):
for j in range(1, N+1):
flag = True
for d in range(4):
if arr[i][j] < arr[i+dx[d]][j+dy[d]]:
flag = False
break
if flag:
#print(arr[i][j], end=' ')
count = count + 1
print(count)
# 10. 스도쿠 검사
# 3X3에 숫자 중복 없이, 각 행과 열에 1~9 숫자 중복 없이
a = [
[1, 4, 3, 6, 2, 8, 5, 7, 9],
[5, 7, 2, 1, 3, 9, 4, 6, 8],
[9, 8, 6, 7, 5, 4, 2, 3, 1],
[3, 9, 1, 5, 4, 2, 7, 8, 6],
[4, 6, 8, 9, 1, 7, 3, 5, 2],
[7, 2, 5, 8, 6, 3, 9, 1, 4],
[2, 3, 7, 4, 8, 1, 6, 9, 5],
[6, 1, 9, 2, 7, 5, 8, 4, 3],
[8, 5, 4, 3, 9, 6, 1, 2, 7]]
def check(arr):
for i in range(len(arr)):
ch1 = [0]*10 # check list
ch2 = [0]*10
for j in range(len(arr)):
ch1[arr[i][j]] = 1
ch2[arr[j][i]] = 1
if sum(ch1) != 9 or sum(ch2) != 9:
return False
for i in range(3):
for j in range(3):
ch3 = [0]*10
for k in range(3):
for s in range(3):
ch3[arr[i*3+k][j*3+s]] = 1
if sum(ch3) != 9:
return False
return True
if check(a):
print('YES')
else:
print('NO')
# 11. 격자판 회문수
# 가로나 세로로 연속된 수들 중에서 5자리 회문으로 된 숫자 개수 구하기
arr = [
[2, 4, 1, 5, 3, 2, 6],
[3, 5, 1, 8, 7, 1, 7],
[8, 3, 2, 7, 1, 3, 8],
[6, 1, 2, 3, 2, 1, 1],
[1, 3, 1, 3, 5, 3, 2],
[1, 1, 2, 5, 6, 5, 2],
[1, 2, 2, 2, 2, 1, 5],
]
cnt = 0
for i in range(3):
for j in range(7):
#print(arr[j][i:i+5]) # slice 0~4개
tmp = arr[j][i:i+5]
print(tmp[::-1])
if tmp == tmp[::-1]:
cnt = cnt + 1
for k in range(2):
if arr[i+k][j] != arr[i+5-k-1][j]:
break
else:
cnt = cnt + 1
print(cnt)