2406 안정적인 네트워크 G3

더보기

#mst

 

지문에 낚시가 많지만 1번 정점은 아~~~무 쓸데가 없다.

adjust matrix를 구성할때도, 1번해당되는 edge는 연결안해도 된다.

이후 mst를 무난하게 구성하고, 필요한 weight, edge정보, 갯수를 다 추출하면 된다.

 

http://boj.kr/11e5c7b37a974c37b613863185406485

1557 제곱 ㄴㄴ D5

더보기

#math

 

우선 https://gratus-blog.tistory.com/74  이걸 많이 참고해서 공부하여 구현하였다.

뫼비우스 함수를 정의해야하는데,

μ(1)=1

이 제곱수로 나누어지면 μ(n)=0

이 서로 다른 k개의 소인수의 곱이면 μ(n)=(−1) ^ k으로 정의 할 수 있다.

 

이후 포함배제 원리에 따라 1부터 N까지 제곱인수가 없는 수를 계산하고, 이분 탐색을 통해 k번째수를 찾아보자.

 

http://boj.kr/55e8a5d137594aa2bb06e038568883fb

8464 Non-Squarefree Numbers D5

더보기

#math

 

앞서 설명한 #1557번에 n의 범위가 다르고 반대로 K번째 제곱수를 찾는 문제이다.

이분탐색하는 코드에서 전체 갯수가 아닌 N-전체 갯수하면 되는 덤으로 따라오는 문제

(이걸 오랫동안 생각했다)

 

http://boj.kr/79f6802fb1084766a7eec6932fe10b80

4991 로봇청소기 G1

더보기

#bfs #tsp

 

내가 푼 방법은 현재 위치를 1번, 나머지 청소해야할 부분을 2,3,4.. 노드라고 생각하고 각 node별로 갈 수 있는 distance를 인접행렬로 만든 다음, 외판원 순회를 해주었다.

 

이거보다 더 쉽게 푸는 방법이 있는 듯하다. 구현 + tsp 무조건 플레이상이라고 생각하는데 G1인거봐선..

 

http://boj.kr/e9f75bd538f54ad7b5751ac563df6ee0

8336 Chess G1

더보기

#ad_hoc, #math

 

배치는 순열의 사이클 구조를 이용하여 n이 4의 배수이거나 n ≡ 1 mod 4일 때만 가능하며, 그 외의 경우는 불가능하다.

조건을 만족할땐, 팩토리얼 연산을 통해 배치 수를 구해보자.

 

http://boj.kr/1c2d6b729bfb4dcaa5a087d12aa26bde

28449 누가 이길까 G5

더보기

#binary_search, #sorting #hash

 

나이브하게 풀면 n^2이 난다. n <= 100000이기 때문에 시간초과 남.

target배열을 정렬한 다음, binary search를 통하여 몇번쨰 인덱스에 넣을수 있는지 찾아보자. 

결과 인덱스보다 앞에있으면 이길수있는 상대, 뒤에있으면 지는 상대일것이다.

추가로 비기는 경우를 대비해 미리 hash map에다 count해 비기는 상대는 미리 구할 수 있을 것이다.

 

http://boj.kr/cf25dc06258f490782015d263405f442

1068 트리 G5

더보기

#dfs #tree

 

트리를 구성하고 제거할 정점을 graph를 돌면서 제거해주자.

제거하는데 있어 인덱스 문제가 생길수 있으니 그래프를 deepcopy하여 처리하자.

이후 dfs해서 leaf node들을 체크해 1씩 증가시켜주자.

만약 제거할 node가 정점이라면 답은 0으로 따로 예외처리를 해주자.

 

http://boj.kr/d6475b90e6aa4991a43f148d568f143f

3987 보이저 1호 G5

더보기

#implement #graph

 

그냥 머... 지문에 있는 대로 구현해주면 된다.

맵 넘어가면 그만 탐색하고500x500이라 1000000번 순회하면 무한 루프라고 판단되어 그만하게 처리해주었다.

개인적으로 같은 난이도였던 #2344보다 훨씬 쉬웠음.

그 문제는 배열의 인덱스를 수식으로 관리해주었어야 했는데 이건 그런것도 없다.

http://boj.kr/70e67c6b98b44b87b4a21ff28debf544

28448 광기의 PS P5

더보기

#greedy

 

관찰을 해보면, 5 * K >= K * T 라면, 그 문제를 푼다해도 무조건 광기력이 0이 된다. 다음과 같은 case들은 우선적으로 바로 풀어주자.

나머지 case들에 대해선, 문제의 난이도에 대해 정렬을 해주고, 따로 tuple에 최소 n만큼 되어야 그 문제를 풀이 할 수 있는 시간을 정의해 주었다. 

이후엔 구현

 

http://boj.kr/df79d52185a7415d9abd35f392a77e6d

2660 회장뽑기 G5

더보기

#bfs

 

각 node를 시작으로 하는 BFS를 수행해주고 가장 긴 distance를 구하는 문제이다.

머.. 무난무난해서 설명할게 없다.

 

http://boj.kr/5b1a0643aab84b9fa2af34f29fa3c210

17839 Baba is Rabbit G5

더보기

#bfs

 

간단한 BFS 문제지만, 정점번호가 string으로 되어 있는 문제이다.

dictonary에서 정점번호 - string을 매칭시켜준 다음, bfs하면된다.

체크해야하는 점은 매번 value를 찾는 과정을 O(n)으로 수행하면, TLE가 발생하기 때문에, 역방항 dictionary를 만들어서 O(1)로 해결해주어야 한다.

 

http://boj.kr/88482fc719b6431093b8c30907137e48

12634 Stock Charts (Large) P2

더보기

#bipartite_matching 

 

주식차트를 이분그래프로 변경하기 위해서 (i, k)번째 시점이 (j, k) 시점 보다 값이 적다면, 이분그래프를 그릴 수 있다.

그뒤론 적절하게 이분매칭의 최대 수는 같이 그릴 수 있는 차트와 같기 때문에 n - 이분매칭 최대수가 답이 된다.

여담으로 똑같은 코드로 12633, 12988을 해결할 수 있다.

 

http://boj.kr/b07bfed22b0b441ab71104a5392e8934

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

9월 3째주 PS 정리  (0) 2024.09.16

23305 수강변경 S4

더보기

#greedy, #hash

n<=1000000 이기 때문에 o(n)으로 풀수있는 방법을 생각해보자.

교환이 무한정 가능하기 때문에 dictonary으로 해당 요구하는 문자열이 있는지 매번 체크해주자.

아이디어 구현이 까다로웠던 문제.

http://boj.kr/08f3f038fcc9427ba56082f202a41329

2487 섞기수열 G4

더보기

#math, #graph

문제 자체는 순열을 Cycle Decomposition 했을 때, 가장 긴 length를 구하는 문제일거라 생각했다.

예제를 유심히 관찰해보자. 예제를 decomposition 해보면 3, 1, 2가 나오는데 답이 6이다.

답은 모든 length의 최대공배수를 구하면 된다. 예제에서 많은 힌트를 얻었다.

추가로 cycle의 갯수가 1개, 2개일때 예외처리를 잘해주자.

http://boj.kr/25d94752491c421bbeda4788d16a5cbe

14302 Codejamon Cipher (Small) G5

더보기

#dp

각 쿼리 별 모든 문자열로 만들수 있는 경우의수를 구하는 문제이다.

각 단어는 무작위로 배치할 수 있으니 dictonary활용하여 a몇개, b몇개...z가 몇개 포함되어있는지 체크해주자.

dp[j]은 dp[0:j] 까지 만들수 있는 문자열의 경우의수로 정의해보자.

dp[j+1]=(dp[j+1]+dp[j−k]× 부분 문자열의 개수) mod MOD 으로 점화식을 세울 수 있다.

http://boj.kr/05c384ea5587447990aff951f4a63c5d

14303 Codejamon Cipher (Large) G4

더보기

#14302와 동일

9134 Komunikace G1

더보기

#graph, #dsu

3차원 공간을 graph으로 변환해 MST를 만드는 cost를 구하는 문제

무엇보다 구현과 input이 많이 이상하다...

 

 

코드가 너무 더럽다.... 시간이 있다면 수정해서 올릴 것.

9169 나는 9999번 문제를 풀 수 있다 P2

더보기

#flow

전형적인 Flow Min cut 문제 

이분 그래프를 모델링 할 때, source -> 맞출수있다 -> 맞출수없다 -> sink 으로 모델링 가능하다

이렇게 모델링 돌려주고 edmonds karp 사용해서 답을 구하자.

 

http://boj.kr/49665f04166b44068a5357afb7cb8d21

14686 Sum Game B2

더보기

#prefix sum

 

배열 2개를 누적합 해주면서 값이 겹치는 경우를 매번 update해주면 된다.

http://boj.kr/23d4f5fc5eec4b18af31bf44acd97ac6

18419 桁和 (Digit Sum)  S1

더보기

#dp

 

n까지 도달하는데, 몇가지의 방법이 필요한가?를 묻는 문제

dp[n]을 n으로 만들수 있는 가짓수라고 가정했을때,

모든 자리수의 분해합을 i라고 정의했을때 dp[n]은 매번 dp[i] + 1로 update 할 수 있다.

먼가 말로 설명하면 어렵다... 코드보면 쉽게 이해할수있을 듯

http://boj.kr/313e5964c20e4a6a9c035c1b8fef54ac

19071 Build the Graph G3

더보기

#adhoc, #graph #greedy

 

입력범위가 매우 크기 때문에 o(1)로 푸는 방법을 생각해보자.

연결할 수 있는 최대 edge보다 m이 크다면, 모두다 연결 가능 할 것이다.

그렇지 않다면, 최대한 greedy하게 연결해야 하는데, 1번 node와 그 외 node를 먼저 다 연결하자.

그 다음은 어떻게 연결해야 최적으로 연결하는건지 생각해보자.

 

http://boj.kr/de287d5689a84ee59b6babbee96806b8

9019 DSLR G3

더보기

#bfs

 

BFS로 digit를 만드는 연산을 추적하면 되는 문제

문자열 + 연산으로 명령어를 append한다면 TLE난다. (+연산이 매우느림)

따라서, 구할 수 있는 연산들을 다 찾은 뒤,  마지막에 합치는 방식으로 최적화 해보자.

본 난이도보단 어려웠던 문제.

 

http://boj.kr/7b079291f2e84a378f2520e2b3432e9b

1017 소수쌍 P3

더보기

#flow #bipartite_matching

 

소수는 홀수이고, 홀수 + 짝수 = 홀수 인 성질을 이용해 이분매칭을 하기 위한 이분 그래프의 설계를 홀수집합, 짝수집합으로 나눌 수 있다.

이후, 첫번째 원소와 매칭시켜줘야하기 때문에 첫번째 원소가 소속되어 있는 원소집합을 고정해놓자.첫번째 원소가 홀수인지 짝수인지에 따라 그룹의 위치를 지정하고,  반대 집합 각 원소별 첫번쨰 원소와, 후보 원소를 지운 다음, 전부 매칭이 되는지 확인하자.

 

http://boj.kr/ee999fee1ab440aaa409fe92cc8b4e40

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

9월 4째주 PS정리  (1) 2024.09.24

+ Recent posts