전체 글 299

[BOJ] 3048번: 개미

3048번: 개미 단순히 구현을 통해 구할 수 있는 문제이기도 하고 결과를 생각해서 구현할 수도 있다. 하지만 나는 시뮬레이션을 다 돌렸다. 코드 시뮬레이션을 다 하기 때문에 결과를 기준으로 코드를 짠 것보다 메모리를 더 많이 사용한다. 더 느린진 모르겠지만 아마 더 느리지 않을까..? #include using namespace std; int main() { int N1, N2, T; array dir; string s1, s2; cin >> N1 >> N2 >> s1 >> s2 >> T; reverse(s1.begin(), s1.end()); for (int i = 0; i < N1; ++i) dir[i] = 'R'; for (int i = N1; i < N1 + N2; ++i) dir[i] = '..

온라인저지 2018.07.19

[BOJ] 3049번: 다각형의 대각선

3049번: 다각형의 대각선 대각선 교차점 하나가 생기려면 대각선 두 개가 필요하고 대각선은 꼭지점 2개로 이뤄지기 때문에 총 4개의 꼭지점의 조합이 필요하다. 즉, n개의 꼭지점 개수 중에서 4개를 순서 없이 선택하면 된다. 그래서 를 계산하면 된다. 코드 #include int main() { int n; scanf("%d", &n); printf("%d", (n * (n - 1) * (n - 2) * (n - 3)) / 24); return 0; }

온라인저지 2018.07.19

천코대 2회 예선 한탄, 자괴감

풀이는 출제자이자 존경스러운 욱제 선배님의 블로그를 참조하시면 될 것 같습니다. 링크 팀은 1학년 후배, 반 친구, 그리고 나로 구성해서 나갔다. 솔직히 팀원 애들 실력을 몰라서 정올 본선 초등부 문제 풀면서 연습해보라 했다. 뭐 굉장히 쉽게 5번까지 AC를 받았단다. 그래서 나는 속으로 학교 정올반 소속인 내가 가장 적게 푸는 거 아닌가 싶었지만 어제 예선을 한 결과 우리 팀 중에 나 빼곤 한 명도 못 풀었더라...물론 나도 한 문제 밖에 못 풀었다. 2개 정도는 더 풀 수 있었는데 시간이 부족했다. 무엇보다 트라이를 하면 할 수록 멘탈이 나가서 막판에는 이성을 잃은 것 같다 ㄹㅇ ㅋㅋㅋㅋㅋ결국 예선 조차 붙지 못하고 떨어졌는데 역시 나는 너무 공부를 안 했다는 것을 몸소 체험했다. 여태까지는 해야지 ..

개인 2018.07.14

[BOJ] 2609번: 최대공약수와 최소공배수

2609번: 최대공약수와 최소공배수 풀이 gcd, lcm코드 정도는 외워놓으면 좋다. 구현하는 것이 문제이기 때문에 어려운 것은 없었다. 코드 #include using namespace std; int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int lcm(int a, int b, int c) { return a * (b / c); } int main() { cin.tie(0); ios_base::sync_with_stdio(false); int a, b; cin >> a >> b; int tmp = gcd(a, b); cout

온라인저지 2018.07.13

[BOJ] 10800번: 컬러볼

10800번: 컬러볼 풀이 지역본선 2015에서 초등부 4번, 고등부 2번으로 나왔던 문제다. 예전에 한 번 풀어본 적이 있었는데 무식하게 으로 풀었다가 당연히 시간 초과를 맞았다 ㅋㅋ 우선 이건 내 머리에서 나온 풀이가 아니다. 사이즈 별로 정렬하는 것까진 생각했는데 색을 어떻게 처리해야 할 지 몰랐다. (왜 그랬는지 모르겠다) CODER's BRUNCH님 블로그 그래도 지금은 완전히 이해했으니 정리하는 겸 써보겠다... N ball[j].s; ++j) { accul += ball[j].s; colorSum[ball[j].c] += ball[j].s; } ret[ball[i].idx] = accul - colorSum[ball[i].c]; } for (int i = 0; i < N; ++i) print..

온라인저지 2018.07.13

[BOJ] 2589번: 보물섬

2589번: 보물섬 풀이 BFS로 맵을 다 돌아주면 된다. 최댓값을 찾아야 하기 때문에 시작점을 바꿔가면서 BFS 돌린다. 참고로 Max - 1을 결과로 출력해야 하는데 -1을 하는 이유는 visit_y_x= 1을 항상 하기 때문에 원하는 결과 값보다 항상 +1이 되기 때문이다. 코드 #include using namespace std; int w, h; char Map[51][51] = { 0, }; int BFS(int y, int x) { int MAX = 0; int visit[51][51] = { 0, }; const int dx[] = {0, -1, 1, 0}; const int dy[] = {-1, 0, 0, 1}; queue q; q.push(make_pair(y, x)); visit[y]..

온라인저지 2018.07.13