kyo
Hyo's Inside
kyo
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Computer Science (1)
    • 42Seoul (6)
    • Algorithm (9)
      • Theory (5)
      • Daily PS (4)
    • Language & Framework (12)
      • Spring (0)
      • Java (11)
      • React (0)
      • C&C++ (0)
      • Node.js (1)
    • Dev (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 슬랙
  • LEMP
  • 참고자료 : 이것이 코딩테스트이다 with 파이썬
  • Nginx
  • 빅오
  • philosophers
  • Greedy
  • 슬랙봇
  • 42SEOUL
  • sigaction
  • 알고리즘
  • docker
  • 세미나
  • minitalk
  • 자바
  • Algorithm
  • 도커
  • mutex
  • 백준
  • slack

최근 글

티스토리

kyo

Hyo's Inside

Algorithm/Daily PS

[Algorithm] BOJ 팰린드롬? - 10942번

2021. 4. 4. 23:38

 

 

1. 문제 풀이

팰린드롬? 문제는 자연수 N 안에서 S번째와 E번째 수까지 팰린드롬, 곧 거꾸로 읽어도 제대로 읽는 것과 동일한지 알아내는 문제이다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.

우선 S부터 E사이의 차를 거리라 부르고 S와 E의 사이의 결과를 담을 이차원배열을 N*N 크기로 생성했다.

펠린드롬의 패턴은 S와 E 보다 1씩 줄어든 거리가 팰린드롬이고 S와 E가 같으면 팰린드롬이 되는 규칙을 이용해 하나씩 1로 채워가는 방식으로 풀이하였다.

거리가 0, 곧 같은 인덱스 일때는 1로 모두 초기화를 하고 거리가 1일때 j , j+1이 같으면 1로 설정했다.

거리가 2이상일때는 거리를 j , 대상인덱스를 z 로 while 문을돌려가며 z / j + z 가 같고 그 안에 직전 값이 1이면 1을 넣도록, 그리고 j + z 가 마지막 인덱스가 되면 j ++로 거리를 늘려갔다.

 

2. 코드

#include <iostream>
#include <cstdio>
using namespace std;

int main(int argc, char const *argv[])
{
	
	int m, x, y;

	int answer;
	scanf("%d", &m);
	int n[m][m] = ;
	int arr[m];

	
	for (int j = 0; j < m; j++)
		scanf("%d", &arr[j]);
	//거리가 0일때 
	for (int i = 0; i < m; i++)
		n[i][i] = 1;
	//거리가 1일때
  for (int j = 0; j < m - 1; j++)
	{
	    if (arr[j] == arr[j + 1])
				n[j][j + 1] = 1;
	}
	int j = 2;
	int z = 0;
	//거리가 2이상일때
	while (j < m)
	{
		if (arr[z] == arr[z + j] && n[z + 1][z + j - 1])
			n[z][z + j] = 1;
	//마지막 인덱스까지 체크했을 시 j++로 거리늘려 체크
		if (z + j == m - 1)
		{
			j++;
			z = -1;
		}
		z++;
	}
	scanf("%d", &answer);
	for (int i = 0; i < answer; i++)
	{
		scanf("%d %d", &x, &y);
     	printf("%d\n", n[x - 1][y - 1]);
	}
	return 0;
}

3. 채점 기록

 

메모리 : 17528KB / 시간 : 316ms

 


 

https://www.acmicpc.net/problem/10942

 

10942번: 팰린드롬?

총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.

www.acmicpc.net

 

 

'Algorithm > Daily PS' 카테고리의 다른 글

[Algorithm] BOJ 다리놓기 - 1010번  (0) 2021.04.05
[Algorithm] BOJ LCS 2 - 9252번  (0) 2021.04.05
[Algorithm] BOJ 동전 1 - 2293번  (0) 2021.04.05
    'Algorithm/Daily PS' 카테고리의 다른 글
    • [Algorithm] BOJ 다리놓기 - 1010번
    • [Algorithm] BOJ LCS 2 - 9252번
    • [Algorithm] BOJ 동전 1 - 2293번
    kyo
    kyo
    〈 🖥〉

    티스토리툴바