You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 오아시스 재결합 on Google, you do not find the information you need! Here are the best content compiled and compiled by the Chewathai27.com/to team, along with other related topics such as: 오아시스 재결합 백준 검열, 백준 AC, 백준 탑, 오 큰수, 백준 카드
3015번: 오아시스 재결합
- Article author: www.acmicpc.net
- Reviews from users: 31021 Ratings
- Top rated: 4.1
- Lowest rated: 1
- Summary of article content: Articles about 3015번: 오아시스 재결합 문제. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 … …
- Most searched keywords: Whether you are looking for 3015번: 오아시스 재결합 문제. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 … ACM-ICPC, ICPC, 프로그래밍, 온라인 저지, 정보올림피아드, 코딩, 알고리즘, 대회, 올림피아드, 자료구조
- Table of Contents:
문제
입력
출력
제한
예제 입력 1
복사
예제 출력 1
복사
힌트
출처
Baekjoon Online Judge
채점 현황
문제
유저 대회 고등학교 대회
출처
대학교 대회
도움말
백준3015 오아시스 재결합 | JusticeHui가 PS하는 블로그
- Article author: justicehui.github.io
- Reviews from users: 22605 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 백준3015 오아시스 재결합 | JusticeHui가 PS하는 블로그 백준3015 오아시스 재결합. 작성일 2018-11-06 | In COI. 문제 링크. http://icpc.me/3015. 문제 출처. Croatian Olympiad in Informatics 2007 1번 … …
- Most searched keywords: Whether you are looking for 백준3015 오아시스 재결합 | JusticeHui가 PS하는 블로그 백준3015 오아시스 재결합. 작성일 2018-11-06 | In COI. 문제 링크. http://icpc.me/3015. 문제 출처. Croatian Olympiad in Informatics 2007 1번 … COI,Stack,문제 링크 http://icpc.me/3015COI, Stack
- Table of Contents:
[백준 3015번] 오아시스 재결합 (java)
- Article author: lotuslee.tistory.com
- Reviews from users: 3588 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about [백준 3015번] 오아시스 재결합 (java) [백준 3015번] 오아시스 재결합 (java) · 매번 느끼는거지만 스택을 이용한 문제는 개인적으로 너무 어렵다.. · 이번 문제도 역시 해결하는데 오랜 시간이 … …
- Most searched keywords: Whether you are looking for [백준 3015번] 오아시스 재결합 (java) [백준 3015번] 오아시스 재결합 (java) · 매번 느끼는거지만 스택을 이용한 문제는 개인적으로 너무 어렵다.. · 이번 문제도 역시 해결하는데 오랜 시간이 … 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231 나노미터 보..
- Table of Contents:
SY DevLog
[백준 3015번] 오아시스 재결합 (java) 본문티스토리툴바
[백준] No.3015 – 오아시스 재결합 (C++, 스택) – Go, Vantage point
- Article author: everenew.tistory.com
- Reviews from users: 899 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about [백준] No.3015 – 오아시스 재결합 (C++, 스택) – Go, Vantage point 알고리즘 공부/백준. [백준] No.3015 – 오아시스 재결합 (C++, 스택). …
- Most searched keywords: Whether you are looking for [백준] No.3015 – 오아시스 재결합 (C++, 스택) – Go, Vantage point 알고리즘 공부/백준. [백준] No.3015 – 오아시스 재결합 (C++, 스택). 문제 https://www.acmicpc.net/problem/3015 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로..
- Table of Contents:
[BOJ] 백준 3015번 오아시스 재결합 (Java)
- Article author: loosie.tistory.com
- Reviews from users: 42825 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about [BOJ] 백준 3015번 오아시스 재결합 (Java) 문제. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 백준이는 갑자기 … …
- Most searched keywords: Whether you are looking for [BOJ] 백준 3015번 오아시스 재결합 (Java) 문제. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 백준이는 갑자기 … #3015 오아시스 재결합 난이도 : 골드 1 유형 : 자료구조 / 스택 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키..
- Table of Contents:
#3015 오아시스 재결합
문제 풀이
풀이 코드
태그
‘Dot Algo∙ DSPS’ 관련글
Comments
티스토리툴바
백준 3015번 오아시스 재결합 – 스위프트(Swift) 풀이 + 그림 설명
- Article author: please-amend.tistory.com
- Reviews from users: 34363 Ratings
- Top rated: 4.0
- Lowest rated: 1
- Summary of article content: Articles about 백준 3015번 오아시스 재결합 – 스위프트(Swift) 풀이 + 그림 설명 백준 3015번 오아시스 재결합 – 스위프트(Swift) 풀이 + 그림 설명. 어멘드 2022. 1. 8. 02:07. 반응형. 어디서 많이 본 것 같은 느낌이 나면서도 중복 처리가 … …
- Most searched keywords: Whether you are looking for 백준 3015번 오아시스 재결합 – 스위프트(Swift) 풀이 + 그림 설명 백준 3015번 오아시스 재결합 – 스위프트(Swift) 풀이 + 그림 설명. 어멘드 2022. 1. 8. 02:07. 반응형. 어디서 많이 본 것 같은 느낌이 나면서도 중복 처리가 … 어디서 많이 본 것 같은 느낌이 나면서도 중복 처리가 힘들었던 문제. 일단 기본 아이디어는, X보다 더 큰 사람 Y가 나오는 순간, 이제 Y보다 뒤에 있는 사람들은 X를 볼 수 없으므로 X를 더 이상 고려하지 않아..
- Table of Contents:
태그
관련글
댓글0
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
[백준/3015/파이썬] 오아시스 재결합 — Mapin
- Article author: dailymapins.tistory.com
- Reviews from users: 2114 Ratings
- Top rated: 5.0
- Lowest rated: 1
- Summary of article content: Articles about [백준/3015/파이썬] 오아시스 재결합 — Mapin Problem. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 … …
- Most searched keywords: Whether you are looking for [백준/3015/파이썬] 오아시스 재결합 — Mapin Problem. 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 … https://www.acmicpc.net/problem/3015 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진..
- Table of Contents:
See more articles in the same category here: Top 673 tips update new.
백준3015 오아시스 재결합
문제 링크
http://icpc.me/3015
문제 출처
Croatian Olympiad in Informatics 2007 1번
사용 알고리즘
스택
시간복잡도
O(n)
풀이
이 문제의 naive한 풀이는 O(n2)이지만, n제한이 최대 5e5이기 때문에 O(nlogn)이나 그보다 더 빠른 알고리즘을 생각해내야 합니다.
이 문제는 O(n)에 해결이 가능합니다. 방법을 알아봅시다. 스택을 사용할건데, 스택에 있는 원소들은 단조 감소 혹은 순감소 상태를 유지하도록 해야합니다.
이 글에서는 순감소 상태를 선택하겠습니다.
스택에는 pair
타입의 데이터가 들어갑니다. first에는 키, second에는 동일한 키를 갖고 있는 사람의 수가 저장이 됩니다.
first의 값이 순감소하는 상태를 유지하게 할겁니다. 그리고, 중복되는 값이 없게 할겁니다.
이렇게 하기 위해서는, 현재 값보다 스택의 top에 있는 값이 더 작거나 같으면 pop를 해줘야 합니다.
순감소 상태를 유지하게 된다면 몇 가지 사실을 알 수 있습니다.
스택 안에 있는 사람은 나중에 들어올 사람들이 볼 가능성이 있는 사람입니다. 이미 스택에서 pop된 사람은 나중에 들어오는 사람들이 절대 볼 수 없는 사람입니다.
이 사실을 이용해서 최적화를 할 수 있습니다.
조금 더 자세히 설명해봅시다.
현재 사람의 키 now와 스택의 top 값을 비교했을 때 top보다 now가 크다면 now보다 나중에 들어오는 사람은 절대로 top을 볼 수 없습니다. 그러므로 정답을 1 증가시킨 후 pop을 합니다.
이 행위를 top보다 작은 now가 나올 때까지 반복합니다.
스택에 now를 삽입해줍니다. 이 때, 스택이 비어있지 않으면 top이 now를 볼 수 있으므로 정답을 1 증가시킵니다.
위 방법은 중복된 값을 고려하지 않은 풀이이므로 때문에 틀립니다.
위에서 언급했듯이 pair의 second값은 중복되는 원소의 개수를 의미합니다.
now가 top보다 큰 경우에도 pop을 하지만, 같은 경우에도 pop을 합니다.
pop을 할 때는 1이 아닌 top의 second값만큼 정답을 증가시킵니다.
now와 top이 같은 경우에는 중복을 카운팅하는 변수를 만든 뒤 증가시키면 쉽게 처리 가능합니다.
전체 코드
[백준 3015번] 오아시스 재결합 (java)
매번 느끼는거지만 스택을 이용한 문제는 개인적으로 너무 어렵다.. 보통 스택을 사용하는 문제의 경우, 스택 자체보다는 스택을 어떻게 사용해야할 지 생각해내는게 어려운 것 같다.
이번 문제도 역시 해결하는데 오랜 시간이 걸렸는데, 가장 어려웠던 것은 키가 같은 사람이 여러명일 경우에 어떻게 해야할지 고민을 오래 했다.
먼저, 이 문제는 특정 사람이 비교기준이 될 때, 스택안에 어떤 사람들이 들어가야 하는지 고민해야 한다.
2 4 3 2 1 2 2 5 1 순서대로 키를 가진 사람이 줄을 섰다고 하자.
키가 2인 5번째 사람(2 4 3 2 1 2 2 5 1)은 자신보다 앞에 줄을 선 사람들 중 누구를 볼 수 있을까?
5번째 사람이 볼 수 있는 자신보다 앞쪽의 사람들은 2번째, 3번째, 4번째 사람이 된다.
맨 앞에 있는 첫번째 사람은 2번째 사람에 의해서 시야가 가려지기 때문에 볼 수가 없다.
그렇다면 5번째 사람의 차례가 되었을 때 스택 안에는 2번째, 3번째, 4번째 사람의 정보가 들어있도록 로직을 세울 수 있다.
즉, 새로 줄을 서게 된 사람이 그 사람들을 볼 수 있는지 없는지 확인을 거쳐야 하는 후보군들이 스택 안에 들어가야하는 것이다.
그러므로 스택 내에서는 키가 내림차순이 되도록 유지되어야 한다.
중간에 키가 큰 사람이 존재하면 그 사람이 시야를 가려버리기 때문에 그 앞쪽에 있는 사람을 무조건 볼 수가 없다. 따라서 그 앞쪽의 사람은 애초에 볼 수 있는지 없는지 여부를 판단할 후보군에서 제외되어 버리기 때문이다.
이제 해야할 일은 새로 줄을 선 사람의 키에 따라 로직을 다르게 세우는 것이다.
– 스택의 top에 있는 사람(새로 들어온 사람의 바로 앞쪽 사람)의 키가 새로 줄을 선 사람의 키보다 큰 경우,새로 들어온 사람이 스택 내에 새로 추가되어도 내림차순이 유지된다. 따라서 새로 줄을 선 사람의 키 정보를 스택에 push한다.
– top에 있는 사람의 키가 새로 줄을 선 사람의 키보다 작다면,
스택에서 하나씩 pop하면서 카운트를 증가시킨다.
자신보다 키가 작은 사람들을 모두 pop하고도 스택에 남아있는 사람이 있다면 한번 더 카운트를 증가시킨다. 그 사람도 볼 수 있기 때문이다.
아래 그림에서는 키가 4인 사람이 자신보다 앞쪽에 있는 사람들 중 총 4명을 볼 수 있다.
그래서 총 카운트가 4번 증가하며, 이것은 자신보다 앞에 선 사람들 중 총 4명을 볼 수 있음을 의미한다.
그리고 마지막으로 자기 자신을 스택에 push한다.
여태까지 설명한 것을 소스코드로 나타내면 아래와 같다.
for (int i = 0; i < N; i++) { int n = Integer.parseInt(br.readLine()); // 자신보다 키가 작은 경우 스택에서 pop while (!stack.empty() && stack.peek().height <= n) { stack.pop(); cnt++; } if (!stack.empty()) cnt++; stack.push(pair); } 그런데 여기서 주의해야할 것이 있다. 문제에서는 키가 같은 사람이 여러번 등장할 수 있기 때문이다. 예를 들어, 아래와 같이 문제가 주어졌다고 할 때, 4번째 사람의 차례이고 현재 스택에는 2번째 사람의 키 정보와 3번째 사람의 키 정보가 들어있다고 하자. 초록색 막대의 사람이 스택에 들어있다는 의미이다. 스택의 top은 1이 있고, 새로 들어온 4번째 사람의 키도 1이다. 스택이 내림차순을 유지해야 하므로 스택에서 top에 있는 사람을 pop한다. 그리고 카운트를 하나 증가시킨다. 그 다음의 top에는 키가 4인 사람이 있으므로 자신보다 크기 때문에 더 이상 pop하지 않고, 카운트를 하나 더 증가시키고 자기 자신을 push한다. 따라서, 총 카운트는 2가 증가한다. 이제, 5번째 사람이 새로 줄을 섰다고 하자. 위와 마찬가지로 자기보다 작은 키를 가진 사람을 스택에서 pop하면 다음과 같이 되며, 이 때의 카운트는 2가 증가한다. 그런데 여기서 문제가 발생한다. 원래대로라면 5번째 사람의 앞에 있는 사람들 중 볼 수 있는 사람은 총 3명이다. 자신 앞에 키가 1인 사람이 둘이 있었기 때문이다. 하지만 이 직전에 스택에서 키가 1인 사람을 pop했기 때문에 카운트가 3이 아니라 2만 증가하게 되었다. 따라서 스택에 키 정보 외에, 같은 키의 사람이 몇 번 등장했는지를 카운트한 카운트 정보도 같이 넣어줘야 한다. 즉, 스택에 들어가는 자료형이 Integer이 아니라 height와 cnt 정보가 함께 들어있는 Pair객체가 들어가도록 해야한다. for (int i = 0; i < N; i++) { int n = Integer.parseInt(br.readLine()); Pair pair = new Pair(n, 1); while (!stack.empty() && stack.peek().height <= n) { Pair pop = stack.pop(); cnt += pop.cnt; if (pop.height == n) pair.cnt += pop.cnt; } if (!stack.empty()) cnt++; stack.push(pair); } static class Pair { int height; int cnt; Pair(int height, int cnt) { this.height = height; this.cnt = cnt; } } 그래서 스택에서 pop할 때마다 자신의 키와 같은 키의 사람을 만나면 pair의 cnt를 하나씩 증가시킨다. 그리고 카운트를 증가시킬 때는 스택의 top에 있는 Pair객체의 cnt값만큼 더해주도록 한다. 전체코드 :
[백준] No.3015 – 오아시스 재결합 (C++, 스택)
반응형
문제
https://www.acmicpc.net/problem/3015
풀이
solved.ac 난이도: Gold 1
스택을 활용해서 푸는 문제. 해당 문제가 까다로운 이유는 아래와 같다.
문제에서는 A와 B의 사이에 키가 큰 사람이 없다면 서로 볼 수 있다.
즉, 사이에 키가 같은 사람이 껴있어도 서로를 문제없이 볼 수 있다.
현실적으로 눈의 위치가 얼굴의 중간쯤(?)에 있기 때문에 중간에 키가 비슷한 사람이 있다면 앞의 사람을 볼 수 없겠지만 해당 문제에선 이것이 가능하다..
키가 같은 사람이 없다면 아래와 같은 알고리즘으로 해결이 가능하다.
현재 사람의 키를 now라고 하고, 스택에는 키가 작은 순서대로 스택의 위쪽에 위치한다. (큰 순서대로 삽입되었다.)
1. stack.top < now 현재 사람의 키가 스택의 top보다 크므로 now에 의해 가려져서, 현재 사람(now)의 뒤에 서있는 사람은 top을 볼 수 없다. 따라서 더 이상 스택에 담겨있을 의미가 없으므로 pop해주고, 쌍의 수(pair_num)을 1 증가시켜준다. 이를 스택에 더 이상 stack.top < now 인 경우가 없을 때까지 while문을 통해 반복해준다. 키가 같은 사람이 없다고 가정했기 때문에 while문을 통과했다 아래의 경우만 존재한다.(스택이 빈 경우는 제외) 2. stack.top > now
이 경우에는 now는 stack.top 보다 앞쪽에 있는 사람은 볼 수 없다.
따라서 쌍의 수(pair_num)을 1 증가시켜준다.
이 과정이 끝났다면 now를 스택에 push해주자.
이러한 과정으로 스택은 키가 큰 순서대로 스택에 저장된다.
하지만 키가 같은 사람이 존재한다면,
5 2 2 3 3 4
와 같은 예제에서
6번째 사람은 앞의 5명을 모두 볼 수 있다.
5 2 2 1 3 3
따라서 stack
>를 통해 first에는 키를, second에는 현재 스택에 같은 키를 가진 사람의 수를 기록하는 알고리즘을 작성하자. 1. stack.top < now 현재 사람의 키가 스택의 top보다 크므로 now에 의해 가려져서, 현재 사람(now)의 뒤에 서있는 사람은 top을 볼 수 없다. 따라서 더이상 스택에 담겨있을 의미가 없으므로 pop해주고, 쌍의 수(pair_num)을 해당 키를 가진 사람 수만큼 증가시켜주자. cnt_pair += st.top().second; 이를 스택에 더 이상 stack.top < now 인 경우가 없을 때까지 while문을 통해 반복해준다. while문을 통과했다 아래의 경우만 존재한다. 2. stack.top == now top가 같은 키를 같는다. now는 같은 키를 갖는 사람들과 모두 쌍을 지을 수 있다. cnt_pair += st.top().second 만약 스택의 크기가 st.top().second 보다 크다면 키가 더 큰 사람이 스택에 저장돼있다는 것이므로 해당 사람과도 쌍을 지을 수 있다. 단 해당 사람은 now보다 키가 크기 때문에 cnt_pair는 1만 증가시켜 준다. 쌍의 수를 모두 늘려주었다면 now 같은 키를 가지는 사람을 +1로 업데이트 해주자. 3. stack.top > now
top이 now보다 키가 크므로 top의 사람과만 쌍을 지을 수 있다.
cnt_pair는 1만 증가시켜 준다.
이 과정이 끝났다면
stack에 키와 사람 수 pair를 push해준다.
코드
반응형
So you have finished reading the 오아시스 재결합 topic article, if you find this article useful, please share it. Thank you very much. See more: 백준 검열, 백준 AC, 백준 탑, 오 큰수, 백준 카드