백준 1747 소수&팰린드롬

JunHo Lee·2023년 9월 11일
0

코딩 테스트

목록 보기
2/2
post-thumbnail
  • 아이디어 1 (시간 초과)
    • 소수 찾기 ← 시간 복잡도가 굉장히 높다.
      • 1 * n을 제외한 숫자의 곱으로 n이 나오면 안 됨
      • 2 부터 n - 1 까지 반복하면서 곱해서 n이 나오는 지 확인
    • 팰린드롬 찾기
      • 숫자 값을 입력 받으면 리스트로 만들기
      • 절반 크기로 반복하면서 첫번째와 마지막이 같은지, 두번째와 마지막에서 두번째와 같은지, … 확인
      • 끝까지 같으면 팰린드롬
    • 코드
      import sys
      input = sys.stdin.readline
      
      def check(i):
        number = list(str(i))
        for j in range(len(number)//2):
          if number[j] == number[len(number) -1 -j]: 
            pass
          else:
            return False
        return True
      
      if __name__ == "__main__":
        N = int(input())
      
        break_check = False
      
        while not break_check:
          continue_check = False
          for i in range(N):
            for j in range(N):
              if (i+2) * (j+2) == N:
                continue_check = True
              if continue_check:
                break
            if continue_check:
              break
            if i + 1 == N:
              if check(N):
                print(N)
                break_check = True
          N += 1
  • 아이디어 2
    • 배수를 빼보자
      • 리스트로 쭉 만들어서 2의 배수 제거, 3의 배수 제거 5의 배수 제거, ..
    • 성공 (492ms)
      import sys
      input = sys.stdin.readline
      
      def checkPalindrome(i):
        number = list(str(i))
        for j in range(len(number)//2):
          if number[j] == number[len(number) -1 -j]: 
            pass
          else:
            return False
        return True
      
      if __name__ == "__main__":
        N = int(input())
        # 1300000까지 리스트로 만들고 배수를 빼보자, 리스트로 쭉 만들어서 2의 배수 제거, 3의 배수 제거 5의 배수 제거, ...
        
        # 1003002까지 리스트 만들고 소수 제거
        # 1000000이 입력되면 출력 값은 1003002이다. 1000000보다 크거나 같은 소수도 찾아야 한다.
        numberList = [True] * 1003002
        numberList[0] = False
        numberList[1] = False
        for i in range(2, 1003002):
          if numberList[i] == True:
            for j in range(i+i, 1003002, i):
              numberList[j] = False
      
        # 소수 리스트 만들기
        primeList = []
        for i in range(2, 1003002):
          if numberList[i] == True:
            primeList.append(i)
      
        # 소수 리스트에서 N보다 크거나 같은 수 찾기
        for i in primeList:
          if i >= N:
            if checkPalindrome(i):
              print(i)
              break

0개의 댓글