
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXO72aaqPrcDFAXS
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
SSAFY 알고리즘 정기스터디 2번째, 알고리즘 리뷰
# 코드
def pel_check(n):
n = str(n)
middle_num = len(n)//2 # 중간 index
if len(n)%2 == 1: # 홀수라면
n = n[0:middle_num] + n[middle_num+1:] # 중간제거
result = 0
# 펠림드롬 검사
if n[0:middle_num] == n[middle_num:]:
result = True
else:
result = False
return result
T = int(input())
cnt = 0
for test_case in range(1, T + 1):
start, end = map(int, input().split())
for i in range(start, end+1):
if pel_check(i): # 참이라면
if int(i**(1/2)) == i**(1/2): # 정수라면
# print(i**(1/2))
if pel_check(int(i**(1/2))): # 루트도 참이라면
cnt += 1
print("#"+str(test_case), cnt)
cnt = 0
2번 검사(n, √n)을 검사해야 해서 "def pel_check(n)" 라는 함수를 만들어서 모듈화를 하려 했다.
하지만 좋은 코드를 보니 좀 더 보기 쉬운 코드를 구현했다.
문제가 "제곱 펠림드롬 수" 이기 때문에 제곱근( √n )과 그냥숫자(n) 가 일단 제곱으로 나누어 떨어지어야 한다.
따라서
내가 푼 방식
1. 펠림드롬 검사
2. 제곱근 검사
3. 제곱근을 펠림드롬 검사
보다는
1. 제곱근이 가능한 지 검사
2. 숫자, 제곱근 둘 다 펠림드롬 검사
가 보기 쉽다.
이유는, 제곱근 검사 후, 둘 다 펠림드롬 검사를 동시에 진행하기에 코드적으로 보고 이해하기 쉽다.
for tc in range(int(input())):
A, B = map(int, input().split())
cnt = 0
for i in range(A, B + 1):
C = i ** (1 / 2)
if C == int(C): # 제곱근이 정수일 때
i = str(i)
C = str(int(C))
if i == i[::-1] and C == C[::-1]:
cnt += 1
print(f'#{tc + 1} {cnt}')
가 보기쉬운 코드다.
여기서 나와 펠림드롬 알고리즘이 차이 나는데
나는 홀수인지 판단하여 중앙을 뺀다.
왜냐하면 문자열이라고 나중에 바뀌었을 때
문자열의 길이가 얼마나 길어질 줄 모르기에
중앙의 값을 뺐다.
여기서는 파이썬코드를 이용하였는데
C = "안녕"
reversed_C = C[::-1]
print(reversed_C)
라고 작성하면
녕안
이라고 거꾸로 뒤집어서 나온다.
이렇게 하면 뒤집어도 같기에 펠린드롬을 검사할 수 있다.
'Programming > Algorithm(Python)' 카테고리의 다른 글
[DFS] leetcode 695번 Max Area of Island (0) | 2023.10.25 |
---|---|
[DFS] leetcode 841번 Keys and Rooms, class이해 (2) | 2023.10.18 |
[구현] SWEA 1284번 수도 요금 경쟁 (2) | 2023.10.12 |
[백준/python][구현] 10812번 - 바구니 순서 바꾸기 (0) | 2023.10.12 |
[백준/python][stack] 24463번 - 미로 (0) | 2023.10.12 |

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXO72aaqPrcDFAXS
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
SSAFY 알고리즘 정기스터디 2번째, 알고리즘 리뷰
# 코드
def pel_check(n):
n = str(n)
middle_num = len(n)//2 # 중간 index
if len(n)%2 == 1: # 홀수라면
n = n[0:middle_num] + n[middle_num+1:] # 중간제거
result = 0
# 펠림드롬 검사
if n[0:middle_num] == n[middle_num:]:
result = True
else:
result = False
return result
T = int(input())
cnt = 0
for test_case in range(1, T + 1):
start, end = map(int, input().split())
for i in range(start, end+1):
if pel_check(i): # 참이라면
if int(i**(1/2)) == i**(1/2): # 정수라면
# print(i**(1/2))
if pel_check(int(i**(1/2))): # 루트도 참이라면
cnt += 1
print("#"+str(test_case), cnt)
cnt = 0
2번 검사(n, √n)을 검사해야 해서 "def pel_check(n)" 라는 함수를 만들어서 모듈화를 하려 했다.
하지만 좋은 코드를 보니 좀 더 보기 쉬운 코드를 구현했다.
문제가 "제곱 펠림드롬 수" 이기 때문에 제곱근( √n )과 그냥숫자(n) 가 일단 제곱으로 나누어 떨어지어야 한다.
따라서
내가 푼 방식
1. 펠림드롬 검사
2. 제곱근 검사
3. 제곱근을 펠림드롬 검사
보다는
1. 제곱근이 가능한 지 검사
2. 숫자, 제곱근 둘 다 펠림드롬 검사
가 보기 쉽다.
이유는, 제곱근 검사 후, 둘 다 펠림드롬 검사를 동시에 진행하기에 코드적으로 보고 이해하기 쉽다.
for tc in range(int(input())):
A, B = map(int, input().split())
cnt = 0
for i in range(A, B + 1):
C = i ** (1 / 2)
if C == int(C): # 제곱근이 정수일 때
i = str(i)
C = str(int(C))
if i == i[::-1] and C == C[::-1]:
cnt += 1
print(f'#{tc + 1} {cnt}')
가 보기쉬운 코드다.
여기서 나와 펠림드롬 알고리즘이 차이 나는데
나는 홀수인지 판단하여 중앙을 뺀다.
왜냐하면 문자열이라고 나중에 바뀌었을 때
문자열의 길이가 얼마나 길어질 줄 모르기에
중앙의 값을 뺐다.
여기서는 파이썬코드를 이용하였는데
C = "안녕"
reversed_C = C[::-1]
print(reversed_C)
라고 작성하면
녕안
이라고 거꾸로 뒤집어서 나온다.
이렇게 하면 뒤집어도 같기에 펠린드롬을 검사할 수 있다.
'Programming > Algorithm(Python)' 카테고리의 다른 글
[DFS] leetcode 695번 Max Area of Island (0) | 2023.10.25 |
---|---|
[DFS] leetcode 841번 Keys and Rooms, class이해 (2) | 2023.10.18 |
[구현] SWEA 1284번 수도 요금 경쟁 (2) | 2023.10.12 |
[백준/python][구현] 10812번 - 바구니 순서 바꾸기 (0) | 2023.10.12 |
[백준/python][stack] 24463번 - 미로 (0) | 2023.10.12 |