문제링크 : https://www.acmicpc.net/problem/17086 #include using namespace std; int n, m, result = 0; queue q; int arr[52][52]; int dx[8] = { 0, 0, -1, 1, -1, -1, 1, 1 }; //1 좌, -1 우 int dy[8] = { -1, 1, 0, 0, -1, 1, -1, 1 }; //1 상, -1 하 void bfs() { while (!q.empty()) { int x = q.front().first, y = q.front().second; q.pop(); for (int i = 0; i < 8; i++) { int nx = x + dx[i]; //다음 x 좌표 int ny = y + dy..
문제링크 : https://www.acmicpc.net/problem/5014 #include using namespace std; int f, s, g, u, d; queue q; int elevator[1000001]; void bfs() { int dx[2] = { u, -d }; //위, 아래 q.push(s); elevator[s] = 1; //첫 시작점을 1로 초기화 while (!q.empty()) { int cur = q.front(); q.pop(); for (int i = 0; i f) { continue; } //범위 조건 if (elevator[nx]!=0) { continu..
문제링크 : https://www.acmicpc.net/problem/2468 #include using namespace std; int arr[102][102]; bool check[102][102]; int n,cnt, mh=-1; int result = 0; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; queueq; void bfs(int x, int y) { check[x][y] = 1; q.push({ x,y }); while (!q.empty()) { int xx = q.front().first, yy = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = xx + dx[i]; //..
문제링크 : https://www.acmicpc.net/problem/2583 #include using namespace std; int area[100][100]; int n, m, k, cnt = 0, cnt2 = 0; int x1, x2, y11, y2; int dx[4] = { -1,1,0,0 }; int dy[4] = { 0,0,-1,1 }; queueq; vector v; void bfs(int x, int y) { area[x][y] = 1; q.push({ x,y }); while (!q.empty()) { int yy = q.front().first, xx = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = xx + ..
문제링크 : https://www.acmicpc.net/problem/1890 #include using namespace std; int arr[100][100]; long long dp[100][100]; //범위가 크므로 long long 선언 int n; int main() { cin >> n; for (int i = 0; i > arr[i][j]; //게임판 입력 } } dp[0][0] = 1; //무조건 첫번째 값은 지나므로 초기화 값은 1 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (arr[i][j] == 0) { break; } //마지막..
문제링크 : https://www.acmicpc.net/problem/1051 #include using namespace std; int n, m; int arr[50][50]; int main() { cin >> n >> m; string input; for (int i = 0; i > input; //숫자를 한줄로 입력받기에 스트링으로 받음 for (int j = 0; j < m; j++) { arr[i][j] = input[j] - '0'; //받은 문자열(숫자)를 하나하나 다시 숫자로 변환 } } int k = min(n, m); //정사각형의 최대 길이 저장 while (k--) { for (int i = 0; k + i < n; i++) //인덱스에 범위 값 설..
문제링크 : https://www.acmicpc.net/problem/16922 #include using namespace std; int n, result; int arr[4] = { 1, 5, 10, 50 }; bool check[1001]; //50 * 20 + 1 void func(int cnt, int index, int sum) { if (cnt == n) { if (!check[sum]) // 1 + 5 = 5 + 1이기에 조건을 검 { check[sum] = 1; //방문처리 result++; //조건에 맞는 값 카운트 셈 } return; } for (int i = index; i < 4; i++) { func(cnt + 1, i, sum + arr[i]); //현재 인덱스 기준으로 자..
문제링크 : https://www.acmicpc.net/problem/2841 #include using namespace std; int N, P; stackplay[7]; int moving = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> P; while (N--) { int a, b; cin >> a >> b; if (play[a].empty()) //해당 줄이 비어있다면 해당 플렛 푸쉬 { play[a].push(b); moving++; } else if (play[a].top() < b) //뒤에 값이 더 크다면 해당 플렛 푸쉬 { play[a].push(b); moving++; } else if (play[a].t..
문제링크 : https://www.acmicpc.net/problem/25644 #include using namespace std; #define fastio ios_base::sync_with_stdio(0); cin.tie(0); int n, result = 0, sum = 0; vector arr; int main() { fastio; cin >> n; for(int i=0; i> a; arr.push_back(a); //a1 ~ an 푸쉬 } for (int i = arr.size() - 1; i >= 0; i--) { result = max(result, arr[i]); //최댓값 저장 sum = max(sum, result - arr[i]); //최댓값과 현재 값의 차이 중 가장 큰 값을 저..
문제링크 : https://www.acmicpc.net/problem/3135 #include using namespace std; #define fastio ios_base::sync_with_stdio(0); cin.tie(0); int A, B, N, teleport, result; int main() { fastio; cin >> A >> B; cin >> N; result = abs(A-B); //증가, 감소로만 이동 while (N--) { cin >> teleport; result = min(result, abs(B - teleport) + 1); //즐겨찾기로 이동한 값과, 증가 및 감소로만 이동한 값중 작은 값 선택 } cout
문제링크 : https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net #include using namespace std; int n; long long dp[90]; //범위 초과로 long long 자료형 사용 int main() { cin >> n; dp[0] = 0; dp[1] = 1; for (int i = 2; i
문제링크 : https://www.acmicpc.net/problem/1032 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net #include using namespace std; int main() { int n; cin >> n; string s = ""; char c[50]; cin >> s; for (int i = 0; i < s.length(); i++) //비교용으로 첫 문자열을 따로 저장해놈 { c[i] = s[i]; } for (int i = 1; i < n; i++) //맨 처음에 문자열..
문제링크 : https://www.acmicpc.net/problem/9084 #include using namespace std; int t, n, coin[21], m; int dp[10001]; int main() { cin >> t; while (t--) { memset(dp, 0, sizeof(dp)); //매 케이스마다 배열을 0으로 초기화 dp[0] = 1; //처음 경우의 수는 무조건 1이므로 1로 초기화 cin >> n; for (int i = 0; i > coin[i]; } cin >> m; for (int i = 0; i < n; i++) { for (int j = coin[i]; j
문제링크 : https://www.acmicpc.net/problem/12919 #include using namespace std; string S, T, temp = ""; int result = 0; void func(string s, string t) { if (s == t) { result = 1; return; } //바꿀 수 있을 때 if (s.size() >= t.size()) { return; } //바꿀 수 없을 때 if (t[t.size() - 1] == 'A') //맨 마지막이 A이면 { temp = t; temp.erase(temp.size() - 1); //A를 지우고 재귀 func(s, temp); } if (t[0] == 'B') //맨 처음이 B이면 { temp = t; t..