일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DP
- 다이나믹 프로그래밍
- 잠실
- BOJ
- sw expert academy
- 시뮬레이션
- C++
- PS
- 브루트포스
- 구현
- dynamic programming
- 해커랭크
- 소수
- 에라토스테네스의 체
- 알고리즘
- 삼성 기출
- 맛집
- 백트래킹
- 동적 계획법
- 삼성 SDS 대학생 알고리즘 특강
- hackerrank
- 그리디
- 완전탐색
- BFS
- Algorithm
- dfs
- 스택
- SWEA
- koitp
- 백준
- Today
- Total
목록시뮬레이션 (15)
펭로그
문제링크 : https://noj.am/1018 브루트포스 문제로 4중 for문이라는 더러운 코드로 문제를 풀게 되었다..... 체스판의 격자를 다음과 같은 2가지의 임의의 규칙을 정할 수 있다.1-1. 홀수번째 줄의 홀수 칸이 'W'1-2. 홀수번째 줄의 짝수 칸이 'B'1-3. 짝수번째 줄의 짝수 칸이 'W'1-4. 짝수번째 줄의 짝수 칸이 'B'or2-1. 홀수번째 줄의 홀수 칸이 'B'2-2. 홀수번째 줄의 짝수 칸이 'W'2-3. 짝수번째 줄의 짝수 칸이'B'2-4. 짝수번째 줄의 짝수 칸이'W' 위와 같은 조건에 해당이 되지 않는 칸이라면 전부 카운트를 시켜서 값을 누적시키면 다시 칠해야하는 칸이 몇칸인지 구할 수 있다.하지만 2가지의 case를 모두 비교할 필요 없이 1의 case를 골라서 ..
문제링크 : https://noj.am/5566 주사위의 지시사항 대로 구현하면 쉽게 풀리는 단순 시뮬레이션 문제이다.1. 현재 위치에서 주사위를 던져 해당 눈금만큼 진행한다.2. 보드의 범위를 초과 했는지 체크한다.3. 초과하지 않았으면 진행된 자리에 있는 지시사항을 수행한다.4. 보드의 범위를 초과 했는지 체크한다. 1234567891011121314151617181920212223242526272829303132333435363738394041// BOJ_5566 주사위 게임#include using namespace std; int direction[1001];int dice[1001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout..
문제링크 : https://noj.am/1120 단순하게 두 문자열을 같은 길이 만큼만 비교하여 일치하지 않는 만큼의 문자가 몇개인지를 체크하여 최소값을 구하는 브루트포스 알고리즘적 방법으로 접근하였다. 1. A의 앞에 아무 알파벳이나 추가한다. 2. A의 뒤에 아무 알파벳이나 추가한다.이 두 조건을 최소값이 나오게 하려면 추가할 아무 알파벳을 B와 같게 만들면 되기 때문에 신경 안써도 되는 조건이다. 12345678910111213141516171819202122232425262728293031323334// BOJ_1120 문자열#include #include using namespace std; int min(int a, int b) { return a > b ? b : a;} int main() ..
문제링크 : https://noj.am/1057 문제의 조건에서 지민과 한수가 둘이 만나기 전까지는 무조건 이긴다고 하였다.따라서 문제에서 나온 조건대로 하면 '만약 서로 대결하지 않을 때는 -1을 출력한다.'은 절대로 나올 수 없기 때문에 무시해도 된다. 두 사람이 만날 수 있는 조건은 A와 B가 각각 2n-1과 2n 이어야 하는 조건이다.계산을 편하게 하기 위해서 그냥 A, B를 작은 순서대로 정렬하고 A가 홀수이고 A-B의 차가 1이면 정답으로 출력하도록 했다. 두 사람이 각 라운드에서 만나지 못한다면 div( ) 함수를 통하여 입력값을 절반으로 나누어주면서 정답을 찾아가면 된다.절반씩 계속 나누기 때문에 최악의 경우에도 O(logN)의 시간복잡도를 보일 것이다. 1234567891011121314..
문제링크 : https://noj.am/14500 1. 모든 경우의 수를 시뮬레이션하여 풀기테트로미노가 나올 수 있는 모든 상황을 시뮬레이션해서 문제를 푸는 방법이다.문제에서 조건을 살펴보면N*M은 최대 500*500 = 250,000테트로미노가 나올 수 있는 모양의 가지 수 = 19가지 250,000 * 19 = 4,750,000번 이므로 1억번을 초과하지 않는다.무식하게 한 좌표를 기준으로 19번의 테트로미노의 상태 모두를 탐색하는 방법으로 푸는게 시간복잡도 면에서는 가장 효율적이다. 다만, 이 방법으로 풀 경우 모든 경우, 숫자를 한개라도 틀리게 적었을 경우 실수하기가 매우 쉽다. 123456789101112131415161718192021222324252627282930313233343536373..
문제링크 : 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..
문제링크 : http://codeforces.com/contest/1059 C. Sequence Transformation 각 숫자들을 인수분해 하면 소수들의 곱으로 이루어진다.입력 사이즈가 100만이기 때문에 100만의 제곱근 만큼인 1000까지의 소수를 구하고 그 소수들 중에서 가장 많은 배수들을 가지고 있는 소수를 추려내고 나머지 모든 수를 1로 출력, 그 소수의 제곱수가 아닌 숫자를 그 소수로 출력, 소수의 제곱수를 출력 하는 식으로 문제를 접근했는데.. 답은 맞게 나오겠지만 메모리 공간이 분명 초과되는듯 하다. 기존엔 문제를 이렇게 풀었으나 출력해서 규칙을 보니.. 2의 배수만 신경쓰면 되는 것을 발견했다.3을 제외하고 전부 2로 출력되었으니 말이다.. 12345678910111213141516..
문제링크 : https://boj.kr/3048 개미 그룹이 서로 -> 는 소문자 str[n1 - i]; str[n1 - i] = str[n1 - i] - 'A' + 'a';}for (int i = n1; i > str[i];cs 12345678910111213141516171819202122232425262728293031323334353637383940414243444546// BOJ 3048 개미#include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); int n1, n2, cnt; c..
문제링크 : https://boj.kr/11559 1. 블럭은 4개 이상 모였을 때 터짐2. 동시에 터지는 것은 하나의 연쇄 단계임3. 한 연쇄 단계에 블럭이 터진 이후 중력에 의해 블럭이 아래로 내려감 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124// BOJ 11559 Puyo Pu..
문제링크 : https://boj.kr/6359 DP 문제라고 한다.왜 DP 문제인지는 잘 모르겠지만 DP로 풀지 않으면 정말 쉽게 풀린다. N이 5라고 가정하고 시뮬레이션을 해보자.0은 문이 닫힌 상태를 1은 문이 열린 상태를 의미한다. 맨 처음0 0 0 0 0 1라운드1 1 1 1 1 2라운드1 0 1 0 1 3라운드1 0 0 0 1 4라운드1 0 0 1 1 5라운드1 0 0 1 0 이쯤 하면 규칙을 찾을 수 있다.각 라운드에 해당하는 숫자만큼의 배수를 찾아서 1 → 0 / 0 → 1 으로 바꿔주면 된다. 12345678910111213141516171819202122232425262728// BOJ 6359 만취한 상범#include #include using namespace std; int ma..