Loading...
2023. 5. 4. 01:52

manacher 응용문제로 이해력 높이기 - 회문인 부분문자열의 개수를 찾는법

1. 문제 16163번: #15164번_제보 (acmicpc.net) 16163번: #15164번_제보 www.acmicpc.net 2. 풀이 연속인 부분문자열에서 회문의 개수를 구하는 문제 manacher 알고리즘을 수행하면서, 나타나는 회문의 개수를 세면 될 것이다... 그런데 회문의 개수를 어떻게 세야할까 예를 들어 ABCBA에 대해서.. manacher 알고리즘을 수행하기 위해 #을 붙여가지고 #A#B#C#B#A#으로 바꾸고 나서.. 각 index에 대해서 양쪽으로 확대해나가 회문인지 찾아나갈텐데 A배열은 각 위치에서 가장 긴 회문의 반지름 길이를 나타내는 것으로, 가장 긴 회문의 반지름 길이를 알고 있다면, 이는 그보다 작은 회문도 포함하고 있는거니까, 이 값을 이용한다면 해당 지점에서 회문의 ..

2023. 5. 1. 00:49

manacher algorithm 기본 개념 익혀보기1

1. 문자열의 부분 문자열 중 가장 긴 palindrome의 길이 찾기 abaccaba와 같이 뒤집었을 때 결과가 동일하다면, 그러한 문자열을 palindrome이라고 부른다. 문자열이 하나 주어졌을때, 해당 문자열의 부분 문자열 중 가장 긴 palindrome의 길이를 구하고자 한다. 예를 들어 bananac의 부분 문자열 중 가장 긴 palindrome은 anana로 길이가 5이다. 1-1) 완전탐색($O(N^{3})$) 이 문제를 가장 쉽게 해결하는 방법은 문자열을 순회하면서 가능한 모든 경우에 대해 완전탐색을 수행하는 것이다. 문자열을 앞에서부터 순회하면서, 시작점 후보를 정하고, 나머지 모든 문자 각각을 끝 점 후보로 설정할 때, 좌우대칭인지 여부를 판별해서 길이가 가장 긴 후보를 구하는 방법 ..

팩토리얼 끝에서 가장 먼저 나오는 0이 아닌 수를 찾는 방법

1. 문제1 2553번: 마지막 팩토리얼 수 (acmicpc.net) 2553번: 마지막 팩토리얼 수 첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다. www.acmicpc.net 2. 풀이 저번에 풀었던 문제와는 다르게 팩토리얼 계산한 값에서 마지막에서 0이 아닌 처음으로 다른 수가 나올때, 그 수를 출력하는 문제 쉽게 생각할 수 있는 방법은..? 저번에 배운 마지막에 0이 나오는 개수를 구하는 방법을 응용하기 마지막에 나오는 0의 개수 k를 구하고, n!을 계산하여 prod라고 저장한 다음에... prod를 $10^{k}$로 나눠준다면? 일의 자리가 정답이 된다 일의 자리는 어떻게 구해? str()로 바꿔서 -1번을 뽑아? 아니 str()로 바꾸는게 생각보다 시간 많이 먹어 ..

컴퓨터로 미분하는 방법(문자열 파싱에서 항상 실수하는 부분 복기)

1. 문제 15725번: 다항함수의 미분 (acmicpc.net) 15725번: 다항함수의 미분 첫째 줄에 최대 일차 일변수 다항식이 주어진다. 항의 개수는 최대 2개이고, 변수는 항상 x로 주어지며, 각 항은 공백 문자로 구분되지 않는다. 주어지는 계수와 상수의 절댓값은 10,000을 넘지 않 www.acmicpc.net 2. 풀이 그냥 간단하게 일차함수를 미분하면 된다 input으로 일차함수 형태가 들어오는데, 일차함수 미분은 결국 x의 계수니까, x의 계수를 파싱해서 출력하면 된다 말은 간단하지만... x의 계수를 컴퓨터가 찾기는 쉽지가 않지 여러가지 경우의 수를 생각해보자. 크게는 일차항이 없는 경우와 일차항이 있는 경우로 나뉠 것이다. 일차항이 없는 경우는 미분하면 0이니까... input을 순..

2023. 3. 26. 23:24

10진수로 바꾸지 않고 2진수, 8진수 서로 변환하기

1. 문제 1373번: 2진수 8진수 (acmicpc.net) 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 2. 2진수에서 바로 8진수로 바꾸는 알고리즘 [진법변환] 2진수,8진수,10진수,16진수 쉽게 변환하는 방법 알아보기! : 네이버 블로그 (naver.com) [진법변환] 2진수,8진수,10진수,16진수 쉽게 변환하는 방법 알아보기! 안녕하세요~~! 오늘도 여러분들께 유익한 정보를 드리러 온 나도비 입니다 !! 오늘의 주제는 2진수,8진수,1... blog.naver.com 8이 2의 세제곱이기 때문에, 원래 2진수에서 3자리씩 끊어서 각각을 10진수로 바꿔서 더해주면 그 수가 8진수가 된다. 1) 주..