32290 MEX vs OR B1

더보기

#bruteforce, #implementation

 

N이 매우 작기 때문에 매번 i or x한 값을 리스트에 넣은 다음, MEX를 구해주면 된다.

MEX를 구하는 방법은 여러가지 있겠지만 나는  i or x한값을  정렬했을때, 인덱스와 값이 다른 시점을 mex로 구현하였다.

XOR만 나오면 항상 정수론적인 생각을 먼저하게 된다...

 

http://boj.kr/9f0e9984f6f74a5bbc55140f7392a69e

32289 Max-Queen S5

더보기

#greedy #math

 

모든 자리에 퀸을 넣는 것이 가장 최적의 경우이다.

그렇다면 가로방향의 공격 쌍수, 세로방향의 공격 쌍 수 대각선 방향의 공격쌍수 이렇게 3가지로 나누어서 생각을 해보았을때, 점화식을 도출할 수 있다.

문제에비해 난이도가 저평가된것 같다..

 

http://boj.kr/abb650e031d34f4fa24702fc4788f6e7

3682 동치 증명 P3

더보기

#graph #scc

 

저번주에 푼다고 하고 못푼 문제다.

 

SCC으로 묶을수 있는 간선들은 모두 동치가 될 수 있다고 설명할 수 있다.

그렇기에 SCC단위를 정점으로 간소화 한다음, 이 정점 집합들을 하나의 SCC로 만들어야 하는 문제로 바꿀 수 있는데,

그렇다면 각 node의 indegree와 outdegree가 모두 1이상이 되어야 하기 때문에 max(indegree == 0, outdegree == 0)인 수를 찾으면 된다. 

SCC 구현 코드를 코사라주 알고리즘을 사용했는데, 아무래도 똑같은 그래프를 2개 만들다 보니 MLE가 자주 발생한다. 그렇기 때문에 비교적 느린 python3이나, 타잔 알고리즘으로 SCC를 구현해야 한다.

 

타잔알고리즘과 SCC를 정점으로 치환하는 방법을 배운 문제

 

http://boj.kr/08a130f1a4aa46f999147858eb0167d5

2812 크게만들기 G3

더보기

#greedy #stack

 

일단 m번 무조건 지워야 하기 때문에 최대 자릿수는 n-m자리일 것이다.

그렇다면 무조건 앞에 수를 가장 큰 수로 두어야 할 것이고, 스택에 하나씩 넣으면서 앞에 자리수가 뒤에자리수보다 작다면 계속 그 작업을 수행해주어야 할 것이다.

 

추가 반례로 모두 다 같은자리인경우 m번 연산을 안할경우가 있는데, 이 점을 따로 예외 처리해주자.

 

http://boj.kr/8dad6cb94d1f463d88f272ee0b64b3fe

27653 최소 트리 분할 G2

더보기

#dfs #greedy

 

연산 내용이 주어진 트리의 부분 그래프의 가중치를 1 늘리는 과정이기 때문에 현재 노드를 기준으로 본다면, 현재 노드의 부모노드의 목표 weight보다 작으면 부모노드의 연산으로 수행할 수 있다.

 

그러기 때문에 대충 1번 노드를 root node으로 잡고 정답은 root node의 weight + sigma 2~n : max(node weight - parent node weight, 0)으로 정의할 수 있다.

dfs으로 각 노드의 부모노드와 목표 가중치를 비교하자

 

http://boj.kr/a09ad08634884c31a098ffded497cf20

17233 문자열 장식 P3

더보기

#kmp #sweeping

 

KMP알고리즘을 수행하면, 원본 문자열에서 부분문자열이 몇개 있는지, 어디에 있는지 모두 구할 수 있을 것이다. 그렇다면 투 포일터를 활용해 l~r 범위 내에 모든 부분문자열이 있느냐?를 체크할 수 있다. 매번 체크를 해주면서 최소 구간을 찾자.

 

대충 시간복잡도를 O(N+M+2N) 정도로... 선형시간내에 해결할 수 있을 것이다.

 

http://boj.kr/cceb8d4ecef14112bc5d6e4c24dfccc0

22217 Scales S2

더보기

#implementation, #math

 

m을 3진수로 나눌 때 bit가 2인 경우, 왼편, 그 외인경우 오른편에 두어 비트연산을 했을 때 그 수가 나올 수 있게 구현하면 된다.

 

http://boj.kr/0c05d9e6d3314b0a9cd8ca5efdcc19ff

16991 외판원순회 3 G1

더보기

#tsp 

 

각 좌표간의 거리를 n^2으로 구해 distance를 구한 다음, 그것을 활용 해 외판원순회를 해주면 된다.

Bitonic Tour라는 좌표상의 외판원순회 알고리즘이 있던데, 이 문제인줄 알았는데, 알고보니 더 쉽게 해결할 수 있었다. 

 

Bitonic Tour 공부해보면 좋을듯. .

http://boj.kr/c10781df6e05442d9b9a98e5476d1a15

1251 단어 나누기 S5

더보기

#bruteforce

 

그리디하게 접근해볼까 하다가 같은 가장 사전순 작은 문자열 일때, 얼마나 더 길게 나눌것인가 생각을 좀 해보았는데, n이 매우작기 때문에 n^3으로 모든 문자열조합을 만드는 방식으로 풀 수 있다.

 

http://boj.kr/d743bf5e470f4c3e9548127e69f6bc6d

2993 세 부분 S5

더보기

#bruteforce

 

1251과 동일

17413 단어뒤집기 2 S3

더보기

#stack #implementation

 

스택을 사용해 구현해주면 된다. 다만 신경써줘야할 부분은 태그 내에 공백이 있는 case를 예외처리 해주면 쉽게 풀린다.

 

http://boj.kr/25acd514eba14c8db23fb88953dca17f

'ps > Solved' 카테고리의 다른 글

10월 4째주 PS정리  (0) 2024.10.22
10월 3째주 PS 정리  (1) 2024.10.14
10월 1째주 PS 정리  (0) 2024.09.30
9월 4째주 PS정리  (2) 2024.09.24
9월 3째주 PS 정리  (0) 2024.09.16

+ Recent posts