-
[BOJ] 3190 : 뱀
3190 : 뱀 풀이 매번 늦어도 이해할게 누굴 만났니 먼저 묻지 않을게 고집스런 내 사랑 너의 말은 변명이라도 믿고 싶을테니 눈 비비는 척 눈물 닦아내고 다음 약속도 잡을 이유 만들지 네 마음보다 한숨과 친해져도 널 보기위해 난 사니까 수 없이 어긋난대도 기다릴게 아무리 가슴 아파도 웃어볼게 떠나선 안 돼 서둘러 져버리지 마 날 밀어내도 깊어지는 이 사랑을 봐 내 입을 막아도 세상이 다 아는데 왜 너만 몰라 왜 널 지킬 남자를 몰라 코드 #include <stdio.h>...
-
[BOJ] 14504 : 로봇 청소기
14504 : 로봇 청소기 풀이 문제에서 주어진대로 구현하면 된다. 지문이 좀 헷갈리게 써있어서 많이 헤메다 풀었다 ㅠㅠ 코드 #include <stdio.h> #define r(a,b) a=(a+b)%4 const int dx[] = { -1,0,1,0 }; const int dy[] = { 0,1,0,-1 }; int n, m, x, y, nx, ny, d, ans; int main() { int a[55][55] = { 0 }; scanf("%d %d %d %d %d", &n, &m, &x, &y, &d); for (int i = 0; i < n; i++) for...
-
[BOJ] 10875 : 뱀
10875 : 뱀 풀이 삼성 문제들은 하나같이 빡친다 단순 구현! 인데 좀 빡치는 구현 O(n^2)에 풀어주자. i번째에 뱀이 움직여서 생긴 선분과 1 ~ i-1번째까지 움직여서 생긴 선분들을 비교해주면 된다. check() 함수가 교차에 관한 구현을 담고 있다. 맵 밖으로 나가는지 여부는 귀찮으니 맵 바깥에 선분을 그어 한 번에 처리해버리자. 음… 자세한 건 주석을 참조하자. 코드 #include <stdio.h> #include <vector> #include <algorithm> #define pb push_back using namespace std; const int INF = 2e9; const int dx[] =...
-
SW 특기자 전형을 꿈꾸는 학우 여러분들을 위하여
홍보: 알고리즘 과외 구합니다 http://wookje.dance/whoami/ SW 특기자 전형을 꿈꾸는 학우 여러분들을 위하여 선린인터넷고등학교 3학년 권욱제 많은 학우 여러분들이 대학 진학을 희망하는 줄로 압니다. 개중에서는 SW 특기자 전형을 생각하는 분들도 여럿일 것입니다. 이 자리를 빌어 첫 SW 특기자 전형을 경험한 제 주관, 그러나 객관적인 입시 결과에 기초한 제 주관으로 작은 조언을 드리고자 합니다. 하지만 어디까지나 저의 얕은 경험에 기초한 ‘권욱제’라는 고등학생의 주관이므로 비판과 객관의 시선으로 읽어주시길 부탁드립니다. 입시는 상대적이지만, 동시에 절대적입니다. 입시는 상대적입니다. 입시는 같은 년도,...
-
[BOJ] 1213 : 팰린드롬 만들기
1213 : 팰린드롬 만들기 풀이 앞뒤로 앞뒤로 넣어주자~ 코드 #include <stdio.h> #include <string.h> int n, i, cnt, flag, a[26]; char str[55]; int main() { scanf("%s", str); n = strlen(str); for (i = 0; i < n; i++) { a[str[i] - 65]++; } for (i = 0; i < 26; i++) { while (a[i]) { if (a[i] == 1) { if (flag) { puts("I'm Sorry Hansoo"); return 0; } flag = 1, str[n / 2] =...
-
[BOJ] 1018 : 체스판 다시 칠하기
1018 : 체스판 다시 칠하기 풀이 그냥 다 돌려보면 된다. 코드 #include <stdio.h> #define min(a,b) (a)<(b)?(a):(b) int n, m, i, j, a, b, ans = 1e9; char str[55][55]; int main() { scanf("%d %d", &n, &m); for (i = 0; i < n; i++) scanf("%s", str[i]); for (i = 0; i < n - 7; i++) for (j = 0; j < m - 7; j++) { int cnt = 0; for (a = i; a...
-
[BOJ] 1450 : 냅색문제
1450 : 냅색문제 풀이 숫자의 크기가 너무 커서 일반적인 냅색 풀이로는 풀 수 없다. 그렇다고 2^30을 돌리자니 그것도 크기가 너무 크다. 수열을 정렬하고 반으로 나눠서 절반씩 완전탐색 해주자. 2^15씩 두 번이니 충분히 돌고도 남는다. 그리고 완전탐색한 두 조합을 linear하게 잘 섞어주자. 코드 #include <stdio.h> #include <vector> #include <algorithm> using namespace std; int n, c, ans, a[33]; vector<int> v1, v2; void dfs(int s, int e, int sum, vector<int>& v) { if (sum > c) return; if...
-
[BOJ] 1799 : 비숍
1799 : 비숍 풀이 일반적인 풀이로 답을 구하려면 O(2^(10*10))으로 TLE가 난다. 체스판에서 대각선이 흑과 백으로 구분됨을 이용하자. 흑색칸 O(2^(5*5))와 백색칸 O(2^(5*5))를 따로 구해서 더하면 TLE를 피할 수 있다. 앞선 (boj 9663 N-Queen) 풀이에서 언급한 x를 +로 뒤집기(?)를 이용할 수 있겠다. 코드 #include <stdio.h> #define max(a,b) (a)>(b)?(a):(b) int n, f, ans[2], l[33], r[33], a[33][33]; void dfs(int x, int y, int c) { ans[f] = max(ans[f], c); if (y >= n) y = f ^ (++x %...
-
[BOJ] 9663 : N-Queen
9663 : N-Queen 풀이 룰루랄라 백트래킹을 해주자~ x 모양 대각선을 + 모양으로 뒤집어서 생각할 때 (x, y) -> (x+y, x-y)를 이용하면 편하다. 말이 조금 이상하지만 아무튼 저렇게 넣고 출력해보면 대강 이해 갈 것이다. https://www.acmicpc.net/problem/2496 위 문제도 이 테크닉을 써서 풀 수 있겠다. 코드 #include <stdio.h> int n, ans, u[33], l[33], r[33]; void dfs(int h, int c) { if (c == n) { ans++; return; } for (int i = 0; i < n; i++) {...
-
[BOJ] 1064 : 평행사변형
1064 : 평행사변형 풀이 hypot(a, b)는 a와 b를 높이, 너비로 하는 빗변의 길이를 구해주는 함수이다. 평행사변형이 만들어질 수 없는 경우를 찾아보자. 둘 이상의 점이 겹치거나, 세 점이 한 직선 위에 있으면 (= 기울기가 같으면) 사각형이 될 수 없다. ccw에서 기울기를 구하는 식을 가져다 쓰자! 여기에 개꿀개꿀 공식이 써있으니 참고하자! 둘 이상의 점이 겹치는 경우도 한 직선 위에 있는 경우이므로 별개로 처리해줄 필요는 없다. (개꿀!) 이제 평행사변형의 둘레의 길이를 찾아보자. 먼저, 남아있는 하나의 점을 찾을 필요가...