본문 바로가기

전체 글

(168)
백준(BOJ) 11585 속타는 저녁 메뉴 내 속도 탄다. 이런 젠장 https://www.acmicpc.net/problem/11585 KMP 알고리즘을 사용하면 된다. 룰렛을 돌릴 문자열을 한번 더 더하면, 즉 원래 문자열이 S라면 S + S라고 하면 룰렛을 돌린 효과를 얻을 수 있다. S + S에 대해 KMP 알고리즘을 적용하면 문제가 쉽게 풀린다. 단, S + S의 마지막을 POP 해줘야 한다. 안그러면 (예를 들어) ABC 라는 문자열이 들어왔을 때 ABCABC가 되어서 상근이가 고기를 먹을려면 나와야하는 ABC를 두 번이나 세게 된다. 그러니까 처음 상태에서 룰렛을 계속 돌리면 다시 처음 상태로 돌아올 텐데, 이 돌아온 상태까지 센다는 말이다. /* 속타는 저녁 메뉴 */ #include #include #include #include..
BOJ(백준) 2252 줄 세우기 https://www.acmicpc.net/problem/2252 parent 배열을 통해서 어떤 애가 트리의 꼭대기인지 파악한다. 즉, 두 번째 for문에서 parent[i] == false를 체크하는데 이 조건문을 통과하는 녀석은 제일 뒤에 있는 학생이다. 세 번째 for문은 어떤 트리에도 속하지 않으니까 위치 조건이 없는 학생을 출력한다. print(int point) 함수는 매개변수로 들어온 point가 제일 뒤에 있는 학생이므로 이 학생의 앞에 오도록 지정된 학생을 방문하면서 출력한다. 몇 번 그려서 하면 바로 파악될듯 /* 줄 세우기 */ #include #include #define MAX_STUDENT 32000 + 1 #define MAX_COMP 100000 + 1 using names..
백준(boj) 1030번 프랙탈 평면 https://www.acmicpc.net/problem/1030 문제를 어떻게 풀 지 구상하는데 시간을 많이 투자했다. 처음부터 배열을 크게 잡는 건 메모리가 터지기 때문에 시도하지 않았고 recursive하게 함수를 돌리면서 각 칸의 색깔을 판정했다. 말로하는 것보다 코드를 보는게 이해가 빠를 듯하다. /* 프렉탈 평면 */ #include #include #define WHITE 0 #define BLACK 1 using namespace std; int Time, N, K, R1, R2, C1, C2, Biggest; int getColor(int r, int c); bool is_middle(int r, int c, int); int main(void) { ios_base::sync_with_s..