The Way

5월 18일 백준 본문

PS/백준 온라인 저지

5월 18일 백준

Jeonggyun 2018. 5. 19. 00:42

* 코드는 맨 아래에 있습니다


쉬운 문제는 거의 다 푼 것 같다. 이제 난이도 있는 문제들이 슬슬 나올.. 것 같다.



# 백준 1406번: 트리의 지름

# 백준 1967번: 트리의 지름

트리의 지름을 구하는 좋은 알고리즘이 있다.

http://blog.myungwoo.kr/112

여기에 잘 설명되어 있음



# 백준 11650번: 좌표 정렬하기

# 백준 11651번: 좌표 정렬하기 2

pair은 문제의 조건대로 비교 연산자가 잘 정의되어 있으므로 사용하면 된다

11651번의 경우 연산자 정의를 새로 하기보단 순서를 바꾸어주면 된다.



# 백준 10814번: 나이순 정렬

stable_sort 문제이다.

그런데 한쪽이 string이라 약간 번거로운 면도 있고, swap시 시간도 오래 걸릴 것 같아서

string은 따로 저장하고, string의 index를 저장한 뒤 pair<int, int>를 sort 해주었다.

index순이므로 그냥 sort를 사용해도 된다. 속도나 메모리 측면에서 우월하다.



# 백준 10825번: 국영수

정렬 기준이 복잡해진다. 이럴 때는 새로운 비교 함수를 하나 만드는 것이 편하다.



# 백준 11652번: 카드

적당한 알고리즘이 떠오르지 않는다. 역시 정렬한 뒤 O(n)에 세주는 것이 최고.



# 백준 11004번: K번째 수

partial sort를 사용하면 O(n)에 풀 수 있다.


scanf + std::sort를 사용해도 풀린다. 1488MS.

scanf + partial sort를 사용하면 1132MS.

cin + partial sort를 사용하면 788MS.

(물론 cin.tie(NULL); cout.sync_with_stdio(false); 를 해주어야 한다)

찾아보니 algorithm에 nth_element라는 함수를 제공한다. 사용하면 796MS.

내가 짠 코드가 그리 비효율적이진 않았나보다.

그리고 동일한 코드인데 다른 사람은 660MS까지 뜨는 것 같다. 무슨 차이인지 도통 모르겠다.



# 백준 1377번: 버블 소트

어떤 값이 출력되는지가 상당히 비직관적이다. 한 눈에 딱 들어오지 않는 사람은 꼭 차례차례 써보자.

써보면 알겠지만, 왼쪽으로 가장 많이 이동한 원소의 이동거리 + 1이 출력된다.



# 백준 11724번: 연결 요소의 개수

# 백준 1707번: 이분 그래프

dfs, bfs 중 편한거 아무거나. 난 dfs가 더 편해서 그거로 했다.



# 백준 10451번: 순열 사이클

탐색의 일종이지만 훨씬 쉽다.

edge 정보를 따로 저장할 필요도 없고, 경로가 딱 하나라 stack도 필요 없다.




'PS > 백준 온라인 저지' 카테고리의 다른 글

1월 3일/4일 백준 (2618, 1315)  (0) 2019.01.04
1월 2일 백준 (14502, 1735, 10026, 14888)  (0) 2019.01.02
5월 17일 백준  (0) 2018.05.18
5월 16일 백준  (0) 2018.05.16
5월 15일 백준  (0) 2018.05.15
Comments