Loading...
2023. 5. 1. 00:49

manacher algorithm 기본 개념 익혀보기1

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

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

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) 주..

문자열 비교 응용 - 다시 처음부터 되돌아가면서 비교해야할때

1. 문제 5555번: 반지 (acmicpc.net) 5555번: 반지 당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 www.acmicpc.net 2. 풀이 보통 target 문자열 찾을때는 한줄 안에서 똑같이 있는지 찾았지만 이 문제는 target 문자열이 뒤로 넘어가면 다시 처음부터 되돌아가야한다 ZAAAAAAAXY에서 XYZ를 찾고자 할때, Z XY 하면 하나를 찾을 수 있다는 뜻 어떻게 할 수 있을까 찾고자 하는 문자열 XYZ의 길이가 3이고 처음부터 끝까지 순회하는데... ZAAAAAAAXY XYZ에 도달하면 끝인데.. 여기서 YZ는 다시 처음 2글자 Z..

Trie 기본문제로 감잡아보기 -전화번호 목록, 게임 닉네임-

1. 문제1 5052번: 전화번호 목록 (acmicpc.net) 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 2. 풀이1 한 번호가 다른 번호의 접두어인 경우가 없어야한다 번호를 트라이에 순차적으로 저장하다가, 마지막을 나타내는 플래그 '*'을 만난다면, 지금 저장하려는 번호는 다른 번호의 접두어가 될 것이다 class Trie: def __init__(self): self.head = {} def add(self,word): current_node = self.head #문자열의 ..