[구현] SWEA 10570 제곱 팰린드롬 수

2023. 10. 16. 18:21· Programming/Algorithm(Python)

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
'Programming/Algorithm(Python)' 카테고리의 다른 글
  • [DFS] leetcode 695번 Max Area of Island
  • [DFS] leetcode 841번 Keys and Rooms, class이해
  • [구현] SWEA 1284번 수도 요금 경쟁
  • [백준/python][구현] 10812번 - 바구니 순서 바꾸기
code_wizard
code_wizard
헛둘헛둘
code_wizard
코드의 신비: 컴퓨터 마법사의 일기
code_wizard
전체
오늘
어제
  • 분류 전체보기 (61)
    • 생각정리 (2)
    • Project (7)
      • Caston Design (5)
      • 상명대 축제 2023 "비상(飛上)" (1)
      • 취뽀Lab (1)
    • Solo Project (4)
      • 소셜로그인+JWT (4)
    • Back-end (4)
      • Spring (4)
      • Test (0)
    • DevOps (1)
      • Docker (1)
    • Tip💡 (2)
    • CS🖥️ (5)
      • Operating System (1)
      • Network (0)
      • OOP (4)
    • Programming (35)
      • Data Structure (3)
      • Algorithm(Python) (26)
      • Java (1)
      • Python (5)
    • DeepLearning (1)
    • sw마에스트로 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 20115번
  • 그리디알고리즘
  • java
  • 캡스톤디자인
  • 백준
  • BFS
  • 티스토리챌린지
  • 경사하강법
  • super
  • Baekjoon
  • 문자열
  • 도커커맨드
  • 구현
  • 축제사이트
  • MSE
  • 오블완
  • Docker
  • 리트코드
  • SW마에스트로
  • 프로그래머스
  • 평균오차제곱
  • jpa
  • 21966번
  • 오버라이딩
  • SWEA
  • 오버로딩

최근 댓글

최근 글

hELLO
code_wizard
[구현] SWEA 10570 제곱 팰린드롬 수
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.