반응형
반응형
알고리즘 : DFS, Flood Fill 풀이 단순한 탐색 알고리즘 문제지만 다른 문제들과 다른점은 4방향이 아닌 8방향을 탐색해야 한다는 것이다. 방향배열을 8*2로 잡아주고 탐색을 해주면 된다. 문제를 풀기에 앞서 이해를 해보면 다음과 같다. 특정 칸의 숫자는 그 칸 주위의 8개의 칸 중에 지뢰의 개수를 나타낸다. 클릭한 칸에서 시작하여 (1)의 숫자가 0이 아닐때 까지 탐색한다. (이때 탐색도 8방향이다) 탐 탐색한 칸은 (1)의 숫자, 탐색하지 않은 칸은 _로 출력한다. 내가 선택한 칸이 지뢰일 경우 그 칸을 -1 나머지는 _를 출력한다. in배열은 입력 데이터 이고 map배열은 지뢰의 갯수를 세어 놓는 배열이다. ( 탐색이 끝나는 지점이 될 것이다. ) 처음에 in 배열을 모두 돌아 map 배열..
출처 2011 지역본선 초등2 문제 주소 백준 2457번 공주님의 정원 2457번: 공주님의 정원 첫째 줄에는 꽃들의 총 개수 N (1a>>b>>c>>d; in[i].start=a*100+b; in[i].end=c*100+d; } sort(in,in+n,cmp); int now=301,ans=0,index,max=0; for(int i=0;i1130) break; // 오늘(now)을 포함하는 꽃들 중 가장 오래 심을 수 있는 꽃을 찾는다. if(max
출처 2013 전국 본선 초등2 알고리즘 그리디 힌트 상자를 싣고 갈 구간을 보자. 문제 풀이 그리디 알고리즘으로 간단하게 풀리는 문제지만 뭐에 대해서 그리디를 적용시킬지 찾는게 쉽지 않다. 결론 부터 말하자면 상자가 트럭에 실려 있는 구간이 짧은 순으로 확인하면 된다. 구간이 같다면 먼저 실을 수 있는 상자를 선택한다. 따라서 상자를 목적지, 출발지 순으로 오름차순 정렬하면 된다. 그 뒤 반복문으로 앞에서 부터 살피면 되는데 이번에 선택된 상자(now)가 트럭에 실려있어야 할 구간을 살피고 모두 실을 수 있다면 now의 cost를, 용량이 초과된다면 남은 용량 만큼을 그 구간에 더해주면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2..
알고리즘 그리디 힌트 손님이 펜션에서 가장 오랫동안 머물 수 있는 방을 찾아준다. 풀이 아이디어는 간단하다. 손님이 오늘부터 가장 오랫동안 머물 수 있는 방을 찾아주면 된다. 여기서 잔재주를 부려보면 펜션의 상태를 char형으로 그대로 저장 말고 0,1로 바꾸어 저장해준다. (O : 1, X : 0) 이러면 비교 연산자를 사용하지 않고 조건문 처리가 가능하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #include using namespace std; int in..
알고리즘 그리디 힌트 가장 칼로리가 높은 토핑만 생각한다. 풀이 도우는 무조건 포함해야 하므로 cost(가격)와 cal(칼로리)를 도우의 가격과 칼로리로 초기화해준다. 토핑의 가격들이 입력되면 내림차순으로 정렬해준다. (토핑은 한 번만 사용할 수 있으므로 남아 있는 토핑 중 가장 칼로리가 높은 토핑만 고려하면 된다.) 현재의 칼로리/달러가 i번째 토핑을 추가했을 때의 칼로리/달러보다 클 경우 cal과 cost를 갱신해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include #include using namespace std; int cmp(int a, int b)..
알고리즘 그리디 힌트 가장 비싼 화폐부터 거슬러 준다. 풀이 이 문제는 대표적인 그리디 문제다. 거슬러 줄 수 있는 가장 비싼 화폐부터 거슬러 주면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include using namespace std; int main(){ int money[8]={10,50,100,500,1000,5000,10000,50000}; int n,cnt=0; cin>>n; for(int i=7;i>=0;i--){ cnt+=n/money[i]; n%=money[i]; } cout
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.