Python에서 회문 번호를 확인하는 방법?
게시 됨: 2020-11-30목차
회문이란 무엇입니까?
회문은 단어, 숫자 또는 앞으로 읽는 것과 같은 뒤로 읽는 문자열입니다.
몇 가지 예: detartrated, 1567651, 2020년 2월 2일, Malayalam
따라서 이 기사에서는 Python을 사용하여 주어진 입력이 회문인지 여부를 확인하는 프로그램을 작성할 수 있는 다양한 방법을 보여줍니다.
방법 1:
마음에 오는 가장 순진한 해결책은 숫자를 반대로하고 입력 숫자와 같은지 확인하는 것입니다. 다음과 같이 할 수 있습니다.
숫자 = 정수(입력());
반전 = 0
숫자 > 0 동안:
숫자 = 숫자 % 10
역방향 = 역방향 * 10 + 숫자
숫자 = 숫자 // 10
숫자==역인 경우:
print("회문입니다!")
또 다른:
print("회문이 아닙니다!")
그러나 이것은 코드의 가독성을 떨어뜨리고 필요한 것보다 더 많은 코드 라인을 갖게 됩니다. 자세한 내용은 온라인 데이터 과학 과정을 확인하십시오.
다음은 한 줄만 사용하여 숫자를 확인하는 짧고 달콤한 방법입니다.
방법 2:
트릭은 입력 번호를 int 대신 str 데이터 유형으로 사용하는 것입니다. 그런 다음 [::-1] 슬라이싱 기술을 사용하여 문자열의 반대를 얻고 if 문 자체에서 동일한지 확인할 수 있습니다.
숫자 = 입력()
숫자 == 숫자[::-1]인 경우 :
print("회문입니다!")
또 다른:
print("회문이 아닙니다!")
방법 3:
배열이 회문인지 여부를 확인하는 재귀적 방법입니다.
def isPalindrome(숫자, 시작, 끝):
시작 >= 종료인 경우 :
참을 반환
숫자[시작] == 숫자[끝]인 경우 :
반환 isPalindrome(숫자, 시작 + 1, 끝 – 1)
또 다른:
거짓을 반환
숫자= list(map(int, input().split()))
n=len(숫자)
isPalindrome(숫자, 0, n-1)인 경우:
print("회문입니다!")
또 다른:
print("회문이 아닙니다!")
isPalindrome 함수는 첫 번째 배열 요소와 마지막 배열 요소가 동일한지 여부를 확인합니다. 그렇지 않은 경우 함수는 즉시 False를 반환합니다. 그렇지 않으면 두 포인터가 중간에서 만날 때까지 다음 극단 요소를 재귀적으로 확인합니다.
읽기: Python 프로젝트 아이디어 및 주제
회문과 관련된 일반적인 코딩 면접 질문
#1 가장 긴 회문 부분 문자열
입력으로 하나의 문자열만 주어지면 문자열에서 가장 긴 회문 부분 문자열의 길이를 반환해야 합니다.
예:
입력: 'acbcbabcc'
출력: 5('cbabc')
접근하다:
이것을 DP의 가장 일반적인 문제 중 하나인 가장 긴 공통 부분 문자열 과 연관시키려고 하면 LCS는 두 개의 문자열을 사용하는 반면 입력 문자열은 하나만 제공된다는 차이점이 있습니다. 회문은 그 반대 방향과 정확히 동일하다는 것을 알고 있으므로 두 번째 문자열을 주어진 입력의 반대 방향으로 만들 수 있습니다.
이제 이것은 LCS를 찾는 것과 정확히 동일해집니다.
def LCSubstr(A, B, m, n):
LCSub = [[ 범위(n+1) 의 i에 대한 0] 범위(m+1) 의 j에 대한]
답변 = 0
범위(m+1) 의 i에 대해 :

범위(n+1) 의 j에 대해 :
if (i == 0 또는 j == 0):
LCSub[i][j] = 0
엘리프 A[i-1] == B[j-1]:
LCSub[i][j] = 1 + LCSub[i-1][j-1]
ans = 최대(ans, LCSub[i][j])
또 다른:
LCSub[i][j] = 0
반환 _
str1 = 입력()
str2 = str1[::-1]
m = len(str1)
n = len(str2)
print('가장 긴 회문 부분 문자열의 길이 = ', LCSubstring(str1, str2, m, n))
따라서 위의 입력에 대해 두 개의 문자열을 다음과 같이 얻습니다.
'acbcbabcc' 및
'ccbabcbca'
가장 긴 공통 부분 문자열은 길이가 5인 'cbabc' 가 됩니다.
#2 문자열의 아나그램이 회문인지 확인
문자열이 입력으로 주어지면 문자열의 아나그램이 회문일 수 있는지 여부를 확인하고 그에 따라 예/아니오를 반환해야 합니다.
예:
입력: '파이썬 파이썬'
출력: 예
(문자열 자체가 회문은 아니지만 가능한 아나그램 'pythonnohtyp'은 회문을 형성합니다)
입력: '해리포터'
출력: 아니오
접근하다:
주의 깊게 보면 짝수 길이의 회문 문자열이 있을 때마다 전반부의 모든 문자가 후반부에서 반복됩니다. 이는 문자열에 있는 모든 문자가 짝수 번 발생함을 의미합니다.
길이가 홀수인 경우 중간 요소(포함하지 않음)의 왼쪽에 있는 모든 문자는 중간 요소의 오른쪽에 동일한 횟수로 나타납니다. 이것은 홀수 번 발생하는 문자 (가운데 요소) 가 하나만 있고 나머지는 모두 짝수번 발생한다는 것을 의미합니다.
이 논리를 사용하여 문자열의 문자 수를 해시에 저장하고 이러한 제약 조건을 확인하여 필요한 답변을 얻을 수 있습니다.
CHAR_RANGE = 256
str1 = 입력()
주파수 = [ 범위(CHAR_RANGE) 의 i에 대해 0]
str1 의 i에 대해 :
freq[ord(i)] += 1 #ord(x)는 x의 유니코드 값을 제공합니다.
num_odds = 0
범위(CHAR_RANGE) 에 있는 i의 경우:
freq[i] & 1인 경우 :
num_odds += 1
if (num_odds > 1):
인쇄("예")
또 다른:
인쇄("아니오")
결론
결론적으로 회문 문제는 매우 일반적이고 흥미롭습니다. 다양한 수학 퍼즐과 경쟁 프로그래밍 문제를 푸는 데 유용합니다.
데이터 과학에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크숍, 업계 전문가와의 멘토링, 1 - 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.
Palindrome 프로그램의 시간 복잡도는 얼마입니까?
이 방법에 의해 수행되는 기본 작업의 수는 각 기본 프로세스가 완료되는 데 정해진 시간이 걸린다고 가정할 때 시간 복잡도를 추정하는 데 자주 사용됩니다. 숫자가 회문인지 여부를 판별하는 시간 복잡도는 O(log10(n))입니다. 값이 회문인지 확인할 때 각 반복에서 숫자 또는 값을 10으로 나눕니다. 결과적으로 시간 복잡도는 숫자의 자릿수와 같습니다.
/는 파이썬의 // 연산자와 어떻게 다릅니까?
나누기 연산자, 즉 파이썬에서 단일 슬래시(/)를 사용할 때 컴파일러는 단순히 슬래시 오른쪽과 왼쪽에 있는 두 값을 나눕니다. 그러나 이중 슬래시(//), 즉 바닥 나누기를 사용할 때 컴파일러에 일반적인 나누기 프로세스를 수행하도록 요청하지만 결과는 답변에 가까운 가능한 가장 큰 정수입니다. 이 정수는 일반 나누기의 결과보다 작거나 같습니다.
Python 개발자의 초급 급여는 얼마입니까?
Python이 대부분의 산업 및 기업에서 널리 사용되어 Python을 두 번째로 높은 급여를 받는 컴퓨팅 언어로 만드는 것은 잘 알려진 사실입니다. Python은 배우기 쉽고 매우 유연하기 때문에 학생과 전문가들 사이에서 가장 좋아하는 프로그래밍 언어이기도 합니다. 인도에서 Python 개발자의 초급 급여는 평균적으로 INR 4,27,293입니다. Python을 배우는 전문가는 Python이 데이터 과학 및 기계 학습과 같은 다른 분야에서도 사용되기 때문에 많은 범위를 가지고 있습니다.