문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
🐍파이썬
T = 10
for test_case in range(1, T+1):
letter = int(input())
pan = [list(input()) for _ in range(8)]
cnt = 0
#가로(행이동)
for r in range(8):
#회문 생성 횟수
for c in range(8-letter+1):
#회문 길이만큼 슬라이싱
if pan[r][c:c+letter] == pan[r][c:c+letter][::-1]:
cnt += 1
#세로(열이동)
for c in range(8):
for r in range(8-letter+1):
char = ''
#r번째 행부터 회문의 길이에 해당하는 회문을 char에 넣기
for r2 in range(r, r+letter):
char += pan[r2][c]
if char == char[::-1]:
cnt += 1
print("#{} {}".format(test_case, cnt))
행과 열을 바꾸어 새로운 배열을 만들어 내어 풀이 진행
import math
for test_case in range(1, 11):
answer = 0
hoi = int(input())
pan = []
for i in range(8):
pan.append(list(input().rstrip()))
pan2 = list(zip(*pan)) #pan의 행과 열을 바꾼 배열
for i in range(8):
for j in range(9-hoi):
p_list = pan[i][j:hoi + j] #pan1의 hoi개 글자 선택(가로 확인)
p_list2 = pan2[i][j:hoi + j] #pan1의 hoi개 글자 선택(세로 확인)
start = 0 #글자를 가리킬 포인터(시작)
end = hoi - 1 #글자를 가리킬 포인터(마지막 글자)
#비교횟수
#홀수면 hoi//2+1이고 짝수면 hoi//2번 확인해야 하므로
#hoi/2를 반올림한 만큼 비교하도록 처리
for _ in range(int(math.ceil(hoi/2))):
if p_list[start] != p_list[end]: #동일한 글자가 아니면 회문이 아님
break
start += 1
end -= 1 #포인터를 옮겨가며 확인
else: #for문을 진행하는 동안 break되지 않은 경우 해당 문자열은 회문
answer += 1
start2 = 0
end2 = hoi - 1
for _ in range(int(math.ceil(hoi/2))):
if p_list2[start2] != p_list2[end2]:
break
start2 += 1
end2 -= 1
else:
answer += 1
print("#{} {}".format(test_case, answer))
💡 행과 열 바꾸기
pan2 = list(zip(*pan))
pan = [['C', 'B', 'B', 'C', 'B', 'A', 'A', 'B'],
['C', 'C', 'C', 'B', 'A', 'B', 'C', 'B'],
['C', 'A', 'A', 'A', 'A', 'C', 'A', 'B'],
['B', 'A', 'C', 'C', 'C', 'C', 'A', 'C'],
['A', 'A', 'B', 'C', 'B', 'B', 'A', 'C'],
['A', 'C', 'A', 'A', 'C', 'A', 'B', 'C'],
['B', 'C', 'C', 'B', 'A', 'A', 'B', 'C'],
['A', 'B', 'B', 'B', 'C', 'C', 'A', 'A']]
pan2 = [('C', 'C', 'C', 'B', 'A', 'A', 'B', 'A'),
('B', 'C', 'A', 'A', 'A', 'C', 'C', 'B'),
('B', 'C', 'A', 'C', 'B', 'A', 'C', 'B'),
('C', 'B', 'A', 'C', 'C', 'A', 'B', 'B'),
('B', 'A', 'A', 'C', 'B', 'C', 'A', 'C'),
('A', 'B', 'C', 'C', 'B', 'A', 'A', 'C'),
('A', 'C', 'A', 'A', 'A', 'B', 'B', 'A'),
('B', 'B', 'B', 'C', 'C', 'C', 'C', 'A')]
👇 리스트 조작법 더 알아보기
python__[2차원 리스트 90도 회전, 행과 열 바꾸기]
가끔 코딩테스트 문제를 풀다보면, 약간의 트릭? 기술?을 쓰면 편한 부분들이 있다.오늘 작성하는 부분들이 바로 그런 것들이다. 알면 너무 편하고, 모르면 쌉고생하는 것들...바로 ㄱㄱ해보자lis
velog.io
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA|파이썬] 1220. [S/W 문제해결 기본] 5일차 - Magnetic (D3) (0) | 2023.05.10 |
---|---|
[SWEA|파이썬] 2817. 부분 수열의 합 (D3) (0) | 2023.05.09 |
[SWEA|파이썬] 1209. [S/W 문제해결 기본] 2일차 - Sum (D3) (0) | 2023.05.09 |
[SWEA|파이썬] 2805. 농작물 수확하기 (D3) (0) | 2023.05.08 |
[SWEA|파이썬] 2806. N-Queen (D3) (1) | 2023.05.07 |
[SWEA|파이썬] 1208. [S/W 문제해결 기본] 1일차 - Flatten (D3) (0) | 2023.05.07 |