WookjeBlog
    • 블로그
    • 소개
    • 태그
    • 수업/강의
    • 라이브러리

    Wookje blog

    알고리즘 블로그였던 것

    Featured Posts
    • [BOJ] 2455 : 지능형 기차

      2455 : 지능형 기차 풀이 기차 뿌뿌 코드 #include <stdio.h> int s, m; int main() { for (int i = 0; i < 4; i++) { int a, b; scanf("%d %d", &a, &b); s = s - a + b; m = m > s ? m : s; } printf("%d", m); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge

      boj koi naive

      wookje.kwon's profile image

      wookje.kwon

      2017-08-20 00:27

    • [BOJ] 2565 : 전깃줄

      2565 : 전깃줄 풀이 LIS를 구해주자! 주어진 두 축을 주어진 선으로 연결했을 때 겹치는 선이 없어야 한다! 한 축 x를 기준으로 잡아 pair를 정렬해주자. 이제 정렬한 축 x를 기준으로 한바퀴 쭉 돌면서 순서대로 마주치는 y축에 대해서 LIS를 수행해주자! 코드 #include <stdio.h> #include <algorithm> #define fst first #define snd second using namespace std; int n, len, lis[100]; pair<int, int> a[100]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d %d",...

      boj koi lis dynamic-programming lower-bound

      wookje.kwon's profile image

      wookje.kwon

      2017-08-16 23:52

    • [BOJ] 1735 : 분수 합

      1735 : 분수 합 풀이 중학교의 추억을 되새겨보자! 룰루랄라~ 코드 #include <stdio.h> int a, b, c, d; int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } int main() { scanf("%d %d %d %d", &a, &b, &c, &d); a = a*d + b*c, c = b*d, b = gcd(a, c); printf("%d %d", a/b, c/b); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA,...

      boj math

      wookje.kwon's profile image

      wookje.kwon

      2017-08-08 19:57

    • [BOJ] 9251 : LCS

      9251 : LCS 풀이 dp[i][j] = a[1~i]와 b[1~j]의 LCS 값 dp[i][j] = max(d[i-1][j], d[i][j-1], d[i-1][j-1] + (a[i] == b[j])) 코드 #include <stdio.h> #include <algorithm> char a[1111], b[1111]; int i, j, d[1111][1111]; int main() { scanf("%s\n%s", a + 1, b + 1); for (i = 1; a[i]; i++) for (j = 1; b[j]; j++) d[i][j] = std::max({ d[i-1][j], d[i][j-1], d[i-1][j-1] + (a[i] == b[j]) }); printf("%d", d[i-1][j-1]); return 0; } 아무말 백준, 백준 온라인 저지, BOJ,...

      boj dynamic-programming

      wookje.kwon's profile image

      wookje.kwon

      2017-08-08 17:15

    • [BOJ] 1965 : 상자넣기

      1965 : 상자넣기 풀이 lower bound를 써주자! 더 큰 상자가 최소 어디에 들어갈 수 있는지 lower bound로 찾으면 된다! O(n^2) dp대신에 lower bound를 써주면 O(nlogn)에 풀 수 있따! 코드 #include <stdio.h> #include <algorithm> using namespace std; int n, len, a[1001]; int main() { scanf("%d", &n); while (n--) { int tmp; scanf("%d", &tmp); auto it = lower_bound(a, a + len, tmp); if (*it == 0) len++; *it = tmp; } printf("%d", len); return 0; } 아무말...

      boj dynamic-programming lis lower-bound

      wookje.kwon's profile image

      wookje.kwon

      2017-08-07 17:14

    • [BOJ] 11055 : 가장 큰 증가 부분 수열

      11055 : 가장 큰 증가 부분 수열 풀이 d[i] = i번째 수까지의 부분 수열 중 최댓값으로 놓자! d[i] = d[j] + a[i] lis에서 dp 배열에 길이를 넣는 것 대신 최댓값을 넣어주면 된다. 코드 #include <stdio.h> int n, ans, a[1001], d[1001]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); d[i] = a[i]; for (int j = 0; j <= i; j++) { if (a[j] < a[i] &&...

      boj dynamic-programming

      wookje.kwon's profile image

      wookje.kwon

      2017-08-07 16:50

    • [BOJ] 1699 : 제곱수의 합

      1699 : 제곱수의 합 풀이 knapsack 풀듯이 똑같이 풀면 된다! 배낭에 무게가 i*i이고 가치가 1인 돌덩이들을 넣는다고 생각하자! dp[j] = min(dp[j-i*i] + 1, dp[j]) 코드 #include <stdio.h> int n, d[100001]; int min(int a, int b) { return a < b ? a : b; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) d[i] = 1e9; for (int i = 1; i*i <= n; i++) for (int j =...

      boj dynamic-programming

      wookje.kwon's profile image

      wookje.kwon

      2017-08-06 20:06

    • [BOJ] 1309 : 동물원

      1309 : 동물원 풀이 d1[i] = 2*i인 우리에서 i번째 칸에 사자를 0마리 놓는 경우의 수 d2[i] = 2*i인 우리에서 i번째 칸의 한 쪽에만 사자를 1마리 놓는 경우의 수 d1[i] = d1[i-1] + d2[i-1] * 2 d2[i] = d1[i-1] + d2[i-1] 위의 식을 그대로 써도 좋지만, 1차원으로 더 압축해보자! 위에서 정의한 d1과 d2를 잘 기억하자. d1[i] = d1[i-1] + d2[i-1] * 2 d1[i] = (d1[i-2] + d2[i-2] * 2) + (d1[i-2] + d2[i-2]) * 2 d1[i]...

      boj dynamic-programming

      wookje.kwon's profile image

      wookje.kwon

      2017-08-05 23:11

    • [BOJ] 2133 : 타일 채우기

      2133 : 타일 채우기 풀이 타일은 n이 짝수인 경우에만 완벽히 채울 수 있다. 2*1 타일을 맨위와 맨아래에 일렬로 배치하는 경우에 유의하자. dp[i] = dp[i-2] * 3 + dp[i-j] * 2 (4 <= i, 4 <= j <= i) 코드 #include <stdio.h> int main() { int n, d[31] = { 1,0,3 }; scanf("%d", &n); for (int i = 4; i <= n; i += 2) { d[i] = d[i - 2] * 3; for (int j...

      boj dynamic-programming

      wookje.kwon's profile image

      wookje.kwon

      2017-08-05 23:06

    • [BOJ] 1316 : 그룹 단어 체커

      1316 : 그룹 단어 체커 풀이 i번째 문자와 i-1번째 문자가 같다면 둘은 연속된 문자이므로 같은 그룹에 속한다. 단어가 그룹에 속해있지 않는 경우는 이미 앞에서 동일한 문자가 나왔고, i번째 문자와 i-1번째 문자가 다른 경우이다. 체킹 배열을 만들어서 체크해주자! 코드 #include <iostream> #include <string> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int tc, ans = 0; string str; cin >> tc; while (tc--) { bool chk[26] = { 0 }, flg = 0; cin >> str;...

      boj string naive

      wookje.kwon's profile image

      wookje.kwon

      2017-08-05 21:30

    • Previous Page
    • 33
    • 34
    • 35
    • 36
    • 37
    • Next Page
    • github
    • facebook
    • rss

    Copyright © Wookje Kwon. All rights reserved.