• 1. 회문 문자열 검사
# 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. 숫자만 추출
# 2. 숫자만 추출
strArr = 'g0en2Ts8eSoft'
res = 0

for str in strArr:
    if str.isdecimal():  # 숫자만 isdecimal
        res = res*10 + int(str)
print(res)

 

 

  • 3. 카드 역배치
# 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. 두 리스트 합치기
# 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. 격자판 최대합
# 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. 사과나무
# 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. 곶감(모래시계)
# 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. 봉우리
# 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. 스도쿠 검사
# 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. 격자판 회문수
# 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)

 

+ Recent posts