일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++
- PS
- SWEA
- dynamic programming
- Algorithm
- dfs
- 구현
- 삼성 기출
- 브루트포스
- 다이나믹 프로그래밍
- 에라토스테네스의 체
- DP
- 잠실
- hackerrank
- 해커랭크
- 시뮬레이션
- 스택
- BFS
- 동적 계획법
- 완전탐색
- sw expert academy
- BOJ
- 삼성 SDS 대학생 알고리즘 특강
- koitp
- 그리디
- 백준
- 백트래킹
- 알고리즘
- 소수
- 맛집
- Today
- Total
목록삼성 기출 (6)
펭로그
문제링크 : https://noj.am/14500 1. 모든 경우의 수를 시뮬레이션하여 풀기테트로미노가 나올 수 있는 모든 상황을 시뮬레이션해서 문제를 푸는 방법이다.문제에서 조건을 살펴보면N*M은 최대 500*500 = 250,000테트로미노가 나올 수 있는 모양의 가지 수 = 19가지 250,000 * 19 = 4,750,000번 이므로 1억번을 초과하지 않는다.무식하게 한 좌표를 기준으로 19번의 테트로미노의 상태 모두를 탐색하는 방법으로 푸는게 시간복잡도 면에서는 가장 효율적이다. 다만, 이 방법으로 풀 경우 모든 경우, 숫자를 한개라도 틀리게 적었을 경우 실수하기가 매우 쉽다. 123456789101112131415161718192021222324252627282930313233343536373..
문제링크 : https://noj.am/16236 BFS로 그냥 풀면 간단한 문제일 줄 알았는데 개인적으로는 약간 고민을 많이 했던 문제이다.아기 상어가 물고기를 먹을 때 먹을 수 있는 물고기 중에서 가장 가까운 아무거나 먹는게 아니라 가장 위, 가장 왼쪽에 있는 것을 먹어야 한다는 까다로운 조건이 붙기 때문이다.이를 해결하기 위하여 우선순위 큐 + BFS를 사용하여 해결하였다. BFS를 위해 필요한 큐를 우선순위 큐로 사용하였고큐에 담길 데이터는 연산자 오버로딩을 통하여 아래와 같이 min heap이 구성되는 방식이다.① BFS 레벨이 작은 순서 (상어의 이동 거리)② x의 좌표가 작은 순서③ y의 좌표가 작은 순서 123456789101112131415161718192021222324252627282..
문제링크 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq 가장 긴 등산로를 만드는 문제로 시작점은 가장 높은 봉우리에서 시작한다.입력을 받을 때 가장 높은 숫자를 highest 변수에 저장하고완전 탐색을 돌리는듯 하면서 값이 highest일 때만 dfs를 돌려서 탐색한다.71727374757677// 값 저장for (int i = 1; i arr[i][j]; highest = max(highest, arr[i][j]); }}Colored by Color Scriptercs A->B 까지 가는 등산로는 A->C->D->B로 돌아서 가는 식의 등산로로 표현할 수도 있기 때문에A-..
문제링크 : https://noj.am/16234 완탐 + DFS/BFS 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 // BOJ 16234 인구 이동#include #include using namespace std; int dx[] = {0, 0, -1, 1};int dy[] = {-1, 1, 0, 0}; struct node { int x, y;}; int N; // 크기int L, R; //..
문제링크 : https://noj.am/14888문제링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeRZV6kBUDFAVH DFS를 이용하여 완전탐색을 시행한 브루트포스 문제이다.각 시행 마다 + - * / 연산 모두를 다음 탐색에서 시행한다.구조를 간단하게 하기 위하여 구조체 안에 생성자를 통해서 다음 노드의 구조체를 만들어준다.이 때, 입력받은 연산이 무엇인지를 확인하여 + - * / 의 연산을 구분해서 데이터를 새로 만들어준다. 재귀 호출 시마다 4번의 추가 호출이 있기 때문에 시간 복잡도는 O(4^N)이다.문제에서 N은 11까지라는 조건이 있으므로 4^11 = 4,194,304 이다.최대 1억..
문제링크 : https://noj.am/14891문제링크 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH 톱니바퀴가 회전하게 되면 각각의 인덱스 위치가 변동된다. 어떤 톱니바퀴의 인덱스가 다음과 같다면0 1 2 3 4 5 6 7 시계방향으로 회전시7 1 2 3 4 5 6 반시계방향으로 회전시1 2 3 4 5 6 0 이렇게 순서가 바뀌므로 rot[] 에 회전이 얼마나 되었는지를 저장해준다.8바퀴를 회전하게 되면 제자리가 되므로 8로 나눈 값을 저장해주면 된다.10111213// 톱니바퀴 회전void rotat(int idx, int dir) { rot[idx] = (rot[id..