팰린드롬 개수 구하기

2018. 12. 27. 12:52· Algorithm
목차
  1. 문제
  2. 풀이

문제

앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(palindrome)이라고 합니다. 예를들어서 racecar, 10201은 팰린드롬 입니다.

두 자연수 n, m이 매개변수로 주어질 때, n 이상 m 이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하도록 solution 함수를 완성해 주세요.


제한사항

  • m은 500,000이하의 자연수이며, n은 m 이하의 자연수입니다.

입출력 예

n m result
1 100 18
100 300 20

입출력 예 설명

입출력 예 #1
1 이상 100 이하의 팰린드롬은 다음과 같이 18개가 있습니다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99

입출력 예 #2
100 이상 300 이하의 팰린드롬은 다음과 같이 20개가 있습니다.
101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292

풀이

#include <iostream>
#include <string>

using namespace std;

int solution(int n, int m)
{
  int answer = 0;

  /* 구현 시작부 */
  string num;
  for (int i = n; i <= m; i++)
  {
    // C++11 이상
    num = to_string(i);

    // C++11 미만은 아래 코드 사용
    // stringstream ss;
    // ss << i;
    // num = ss.str();

    bool isPalindrome = true;
    for (int j = 0; j < num.size() / 2; j++)
    {
      char s = num.at(j);
      char e = num.at(num.size() - 1 - j);
      if (s != e)
      {
        isPalindrome = false;
        break;
      }
    }
    answer += isPalindrome;
  }
  /* 구현 종료부 */

  return answer;
}

int main()
{
  cout << solution(100, 300) << endl;
}

코드를 보면 각각의 100~300 사이 숫자들을 string 형태로 변환하여 사용하였는데 각 자리수를 뽑아내는 방법이야 있겠지만 접근성..?이 string으로 할 때 더 쉬울 것 같다.

그리고 제시된 코드에서 string 헤더가 추가되어 있길래 쓰라는 힌트라 생각..

to_string이나 stringstream을 사용하여 100, 101, 102 등과 같은 숫자들을 string으로 변환시키고

for문을 사용하여 각 자리수(인덱스 0~끝까지) 비교한다.

예를 들어 1234567이면, 0번 인덱스(1)와 마지막 6번 인덱스(7)
그다음 1번 인덱스(2)와 5번 인덱스(6).. 이런식으로 가다보면 당연히 중간 값 num.size() / 2 까지 해야되겠다는 감이 온다..

중간에 같지 않으면 플래그(isPalindrome)를 false(0)로 변환시키고 아니면 초기 값 true(1)를 answer에 더해준다.

출처

프로그래머스

저작자표시 동일조건 (새창열림)

'Algorithm' 카테고리의 다른 글

방 예약자 출력하기  (0) 2018.12.27
최대 곱의 집합  (0) 2018.12.27
가장 큰 정사각형 구하기  (0) 2018.12.27
숫자를 연속된 덧셈으로 표현하는 알고리즘  (0) 2018.12.27
2진수의 1개수가 같은 다음 수 찾기  (0) 2018.12.27
  1. 문제
  2. 풀이
'Algorithm' 카테고리의 다른 글
  • 방 예약자 출력하기
  • 최대 곱의 집합
  • 가장 큰 정사각형 구하기
  • 숫자를 연속된 덧셈으로 표현하는 알고리즘
lasiyan
lasiyan
소프트웨어 개발 블로그
lasiyan
LA Dev.
lasiyan
전체
오늘
어제
  • All (85)
    • Modern C++ (3)
      • STL Container (2)
    • Language (14)
      • C++ (13)
      • Python (1)
    • A.I (4)
    • Algorithm (37)
    • Vision (7)
    • System (4)
    • Application (3)
    • Undefined (11)
    • 일상 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 알고리즘
  • 소프트웨어개론
  • 표준입출력
  • 딥러닝
  • C
  • c++
  • 컨테이너
  • yolo
  • mfc
  • 프로그래머스
  • container
  • dll
  • 리눅스
  • stl
  • Python
  • 영상처리
  • 코딩테스트
  • 윈도우 프로그래밍
  • JETSON

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
lasiyan
팰린드롬 개수 구하기
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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