반응형

6679번 문제 : 싱기한 네자리 숫자

https://www.acmicpc.net/problem/6679


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
 
using namespace std;
 
bool Check(int num)
{
    int a = 0, b = 0, c = 0;
    int a_sum = 0, b_sum = 0, c_sum = 0;
    a = num;
    b = num;
    c = num;
    
    while (a > 0)
    {
        a_sum += a % 10;
        a /= 10;
    }
 
    while (b > 0)
    {
        b_sum += b % 12;
        b /= 12;
    }
 
    while (c > 0)
    {
        c_sum += c % 16;
        c /= 16;
    }
 
    if (a_sum == b_sum && a_sum == c_sum && a_sum == b_sum)
        return true;
    else
        return false;
}
 
int main()
{
    for (int i = 1000; i < 10000; i++)
    {
        if (Check(i))
            cout << i << endl;
    }
 
    return 0;
}
cs



1051번 문제 : 숫자 정사각형

https://www.acmicpc.net/problem/1051


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
 
using namespace std;
 
int max_x, max_y;
int matrix[100][100= { 0, };
int index = 0;
 
bool CheckSquare(int x, int y)
{
    if (x >= 0 && x < max_x - index && y >= 0 && y < max_y - index)
    {
        if (matrix[x][y] == matrix[x][y + index] && matrix[x][y] == matrix[x + index][y] && matrix[x][y] == matrix[x + index][y + index])
        {
            return true;
        }
    }
 
    return false;
}
 
 
int main()
{
    cin >> max_x >> max_y;
 
    for (int i = 0; i < max_x; i++)
    {
        string input;
        cin >> input;
        for (int j = 0; j < max_y; j++)
        {
            matrix[i][j] = input[j] - '0';
        }
    }
 
    int index_max = min(max_x, max_y);
    int max_squareSize = 0;
 
    while (index < index_max)
    {
        for (int i = 0; i < max_x; i++)
        {
            for (int j = 0; j < max_y; j++)
            {
                if (CheckSquare(i, j))
                {
                    max_squareSize = (index + 1* (index + 1);
                    break;
                }
            }
        }
 
        index++;
    }
 
    cout << max_squareSize << endl;
 
    return 0;
}
cs


메모:

-index =0부터 시작해야함 그러지 않으면

1 1

1

예외 발생 정답:1 (오답: 0)

반응형

'C++ Algorithm > 백준 알고리즘 문제 풀이' 카테고리의 다른 글

우선순위 큐  (0) 2019.08.27
트리 사용하기  (0) 2019.04.29
그리디 알고리즘  (0) 2019.04.28
동적 계획법 기초  (0) 2019.04.08
그래프(DFS, BFS)  (0) 2019.04.04

반응형
11279번 문제 : 최대 힙


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    vector<int> v;
 
    int num;
    cin >> num;
 
    while (num > 0)
    {
        int input;
        cin >> input;
        if (input == 0)
        {
            if (v.empty())
            {
                cout << "0" << "\n";
            }
            else
            {
                int max = v.front();
                int index = 0;
                for (int i = 0; i < v.size(); i++)
                {
                    if (v[i] > max)
                    {
                        max = v[i];
                        index = i;
                    }
                }
 
                cout << max << "\n";
                v.erase(v.begin() + index);
            }
        }
        else
        {
            v.push_back(input);
        }
    
        num--;
    }
 
 
    return 0;
}
cs

메모
-처음엔 시간초과 발생
-endl 그리고
ios::sync_with_stdio(0);
    cin.tie(0);

추가하면 시간초과 해결됨




1927번 문제 : 최소 힙

https://www.acmicpc.net/problem/1927


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    vector<int> v;
 
    int num;
    cin >> num;
 
    while (num > 0)
    {
        int input;
        cin >> input;
        if (input == 0)
        {
            if (v.empty())
            {
                cout << "0" << "\n";
            }
            else
            {
                int min = v.front();
                int index = 0;
                for (int i = 0; i < v.size(); i++)
                {
                    if (v[i] < min)
                    {
                        min = v[i];
                        index = i;
                    }
                }
 
                cout << min << "\n";
                v.erase(v.begin() + index);
            }
        }
        else
        {
            v.push_back(input);
        }
    
        num--;
    }
 
 
    return 0;
}
cs


반응형

'C++ Algorithm > 백준 알고리즘 문제 풀이' 카테고리의 다른 글

추가 문제 풀이  (0) 2019.09.28
트리 사용하기  (0) 2019.04.29
그리디 알고리즘  (0) 2019.04.28
동적 계획법 기초  (0) 2019.04.08
그래프(DFS, BFS)  (0) 2019.04.04

반응형

64비트 앱 대응 - Unity 5.6 에서 Unity 2017.4 LTS 버전으로 업데이트


프로젝트를 시작하면, 웬만하면 처음 선택한 엔진 그대로 유지하면서 엔진 업데이트를 하지 않았다.

지금까지 엔진 버전 업데이트를 선호하지 않았던 이유는 없었던 버그가 발생하기도 하고 기존 플러그인과의 충돌이 나서 해결하기 어려워지는 경우도 많았기 때문이다...


하지만 안타깝게도 이번에 구글에서 혁신(?)을 위해 64비트 앱을 필수적으로 요구하게 되었다... 

메일을 요렇게 친절하게 보내주셨다...



어찌됫든 64비트 앱 대응을 위해 구글링한 결과 내가 쓰고 있는 유니티 5.6버전은 64비트 빌드가 안된다...

현재기준(2019.05.28)으로 2017.4 LTS 버전 2018.2 이상만 64비트 빌드가 가능하다는 사실에 어쩔수 없이 5.6에서 2017.4 LTS로 업데이트를 감행하게 되었다.

https://blogs.unity3d.com/kr/2019/03/05/android-support-update-64-bit-and-app-bundles-backported-to-2017-4-lts/

(나중에 5.6도 64비트 빌드 지원해주려나?)



무거운 프로젝트는 아닌지라 상위 버전으로 변경하는 시간은 생각보다 안걸렸지만 문제는 2017.4 LTS로 옮기고 빌드가 정상적으로 안된다 문제에 부딪혔다...

문제는 찾아본 결과 기존의 SDK, JDK, NDK가 옛날 버전이어서 이 외부 툴도 같이 업데이트를 해줘야했다... 그래서 2017.4 에서 요구하는 SDK, JDK, NDK 도 모두 업데이트 한 후 빌드한 결과, 빌드는 다행히 성공했다!

 


(수정: 2018.4 LTS -> x86는 제외 하고 빌드)


(참고로 빌드할떄 ARM64를 꼭 체크해줘야 64비트빌드가 된다!! 

+수정: x86는 체크에서 제외하자)



빌드 성공의 기쁨도 잠시 앱 테스트를 진행하려고 하는데 앱들어가자마자 진행하는 구글 플레이 로그인에서 화면이 멈췄다.... Google Play Plugin이 말썽이었던 것이었다...


원래 Google Play Plugin v.0.9.50 을 사용하고 있었지만 이 플러그인을 사용할 경우 아예 앱이 제대로 동작하지 않았다. 아마도 2017.4 LTS 최선버전과 호환이 제대로 되지 않아서 생기는 문제 같다.

옛날에도 Authentication이 제대로 되지않아 애 먹었던 기억이 있었는데 해결하는데 정말 하루종일 걸렸다...



글로 설명하기 힘들정도로 구글링에서 찾은 정말 다양한 방법으로 플러그인을 삭게, 설치, 재설치, 빌드 방법 변경 등을 했는데 결국 성공한 케이스를 요약하자면


1. Unity 2017.4.27 LTS 가장 최신 버전 사용 (2019.05.27 기준)

2. Google Play Plugin v.0.9.64 가장 최신 버전 사용 (2019.05.27 기준)

https://github.com/playgameservices/play-games-plugin-for-unity

3. 원래 Google Play Plugin v.0.9.50 을 사용하고 있었기때문에 Google Play Plugin과 관련있는 폴더 전부 삭제 (GooglePlayGames, PlayServicesResolver, Plugins/Android) 그리고 해당하는 Meta 데이터까지 깔끔하게 삭제!! (제일 중요한 부분인듯)

4. 새로운 플러그인 Google Play Plugin v.0.9.64 설치

5. Assets -> Play Service Resolver - > Android Resolver - > Resolve (원래는 package를 열면 자동으로 해주는데 지웠다 설치했다 반복하니까 자동으로 안될때도 있더라...)

6. Window -> Google Play Games -> Setup -> Android Setup 다시 설정

7. 빌드할때 Internal로! 

(Gradle버전으로 할 경우 플러그인의 버그인지는 모르겠으나 Google Play Authentication가 정상적으로 되지 않음... 그래서 안타깝게도 현재는 Android App Bundle형식으로 앱을 빌드 할 수가 없음 ㅠㅠ)

8. 기도




이번에 업데이트를 하면서 느낀게 나같은 소규모 인디게임은 어찌어찌 2017버전으로 큰 문제 없이 업데이트를 할 수 있겠지만 유니티4, 5 를 활용한 정말 오래된 게임은 어떻게 64비트 앱에 대응할까 궁금하다...





반응형
반응형

트리 순회 개념 

출처 - 위키백과 :https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C

-전위 순회

전위 순회(preorder)는 다음과 같은 방법으로 진행한다.

  1. 노드를 방문한다.
  2. 왼쪽 서브 트리를 전위 순회한다.
  3. 오른쪽 서브 트리를 전위 순회한다.

전위 순회는 깊이 우선 순회(depth-first traversal)라고도 한다.

-중위 순회

중위 순회(Inorder)은 다음의 순서로 진행된다.

  1. 왼쪽 서브 트리를 중위 순회한다.
  2. 노드를 방문한다.
  3. 오른쪽 서브 트리를 중위 순회한다.

중위 순회는 대칭 순회(symmetric)라고도 한다.

-후위 순회

후위 순회(postorder)는 다음과 같은 방법으로 진행한다.

  1. 왼쪽 서브 트리를 후위 순회한다.
  2. 오른쪽 서브 트리를 후위 순회한다.
  3. 노드를 방문한다.

-레벨 순서 순회

레벨 순서 순회(level-order)는 모든 노드를 낮은 레벨부터 차례대로 순회한다. 레벨 순서 순회는 너비 우선 순회(breadth-first traversal)라고도 한다.

  • 전위 순회: F, B, A, D, C, E, G, I, H (root, left, right)
  • 중위 순회: A, B, C, D, E, F, G, H, I (left, root, right)
  • 후위 순회: A, C, E, D, B, H, I, G, F (left, right, root)
  • 레벨 순서 순회: F, B, G, A, D, I, C, E, H

1991번 문제 : 트리 순회

https://www.acmicpc.net/problem/1991


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <string>
using namespace std;
 
string resultA, resultB, resultC;
 
class TreeNode
{
public:
    char value;
    TreeNode *right = NULL;
    TreeNode *left = NULL;
 
    TreeNode()
    {
        value = ' ';
        right = NULL;
        left = NULL;
    }
 
    void SetNode(char v, TreeNode *l, TreeNode *r)
    {
        value = v;
        right = r;
        left = l;
    }
 
 
    void PreorderTraversal(TreeNode *n)
    {
        if (n != NULL)
        {
            resultA += n->value;
            PreorderTraversal(n->left);
            PreorderTraversal(n->right);
        }
 
    }
 
    void InorderTraversal(TreeNode *n)
    {
        if (n != NULL)
        {
            InorderTraversal(n->left);
            resultB += n->value;
            InorderTraversal(n->right);
        }
    }
 
    void PostorderTraversal(TreeNode *n)
    {
        if (n != NULL)
        {
            PostorderTraversal(n->left);
            PostorderTraversal(n->right);
            resultC += n->value;
        }
    }
};
 
TreeNode* node = new TreeNode[27];
 
int main()
{
    int num;
    cin >> num;
 
    while (num > 0)
    {
        char v, l, r;
        cin >> v >> l >> r;
 
        if(l != '.' && r!= '.')
            node[(int)(v - 'A')].SetNode(v, &node[(int)(l - 'A')], &node[(int)(r - 'A')]);
 
        if (l != '.' && r == '.')
            node[(int)(v - 'A')].SetNode(v, &node[(int)(l - 'A')], NULL);
 
        if (l == '.' && r != '.')
            node[(int)(v - 'A')].SetNode(v, NULL&node[(int)(r - 'A')]);
 
        if (l == '.' && r == '.')
            node[(int)(v - 'A')].SetNode(v, NULLNULL);
 
        num--;
    }
 
    TreeNode *startNode = &node[0];
    startNode->PreorderTraversal(startNode);
    cout << resultA << endl;
    startNode->InorderTraversal(startNode);
    cout << resultB << endl;
    startNode->PostorderTraversal(startNode);
    cout << resultC << endl;
 
    delete[] node;
 
    return 0;
}
cs


반응형

'C++ Algorithm > 백준 알고리즘 문제 풀이' 카테고리의 다른 글

추가 문제 풀이  (0) 2019.09.28
우선순위 큐  (0) 2019.08.27
그리디 알고리즘  (0) 2019.04.28
동적 계획법 기초  (0) 2019.04.08
그래프(DFS, BFS)  (0) 2019.04.04
반응형
11399번 문제 : ATM
https://www.acmicpc.net/problem/11399

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
vector<int> v;
 
int main() 
{
    int num;
    cin >> num;
    
    for (int i = 1; i <= num; i++)
    {
        int inp;
        cin >> inp;
        v.push_back(inp);
    }
 
    sort(v.begin(), v.end());
 
    for (int i = 1; i < v.size(); i++)
    {
        v.at(i) += v.at(i - 1);    
    }
 
    int sum = 0;
    for (auto i : v)
        sum += i;
 
    cout << sum << endl;
 
 
    return 0;
}
cs



11047번 문제 : 동전0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
vector<int> v;
 
int main() 
{
    int num, sum;
    cin >> num >> sum;
 
    for (int i = 0; i < num; i++)
    {
        int inp;
        cin >> inp;
 
        v.push_back(inp);
    }
    
    int counter = 0;
    
    for (int i = v.size() - 1; i >= 0; i--)
    {
        while (true)
        {
            int temp = sum - v.at(i);
            if (temp >= 0)
            {
                sum -= v.at(i);
                counter++;
            }
            else
                break;
        }
        if (sum == 0)
            break;
    }
 
 
    cout << counter << endl;
 
    return 0;
}
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
vector<int> v;
 
int main()
{
    int num;
    cin >> num;
    for (int i = 0; i < num; i++)
    {
        int input;
        cin >> input;
        v.push_back(input);
    }
 
    sort(v.begin(), v.end(), greater<int>());
 
    int maxWeight = 0;
    if (v.size() >= 2)
    {
        for (int i = 0; i < v.size() - 1; i++)
        {
            int weight = 0;
            if (v.at(i) > v.at(i + 1* (2 + i))
            {
                weight = v.at(i);
            }
            else
            {
                weight = v.at(i + 1* (2 + i);
            }
 
            if (weight > maxWeight)
                maxWeight = weight;
        }
    }
    else
    {
        maxWeight = v.at(0);
    }
 
    cout << maxWeight << endl;
 
    return 0;
}
cs



4307번 문제 : 개미

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
vector<int> result;
 
int main()
{
    int cases;
    cin >> cases;
 
    for (int i = 0; i < cases; i++)
    {
        int length, numOfAnts;
        cin >> length >> numOfAnts;
 
        vector<int> v;
 
        for (int j = 0; j < numOfAnts; j++)
        {
            int startPosition;
            cin >> startPosition;
 
            if (startPosition <= length / 2)
            {
                v.push_back(startPosition);
            }
            else
            {
                v.push_back(length - startPosition);
            
            }
        }
        
        sort(v.begin(), v.end(), greater<int>());
        
        result.push_back(v.at(0));
        result.push_back(length - v.at(v.size() - 1));
    }
 
    for (int i = 0; i < result.size(); i++)
    {
        cout << result.at(i) << " ";
        if (i % 2 == 1)
            cout << endl;
    }
    
    
    return 0;
}
cs


메모:

- 가장 늦은 시간을 구할때 개미가 충돌할 때 방향을 바꾸는 것이 그냥 지나치는 것과 결국 같다 -> 이 부분이 핵심




반응형

'C++ Algorithm > 백준 알고리즘 문제 풀이' 카테고리의 다른 글

우선순위 큐  (0) 2019.08.27
트리 사용하기  (0) 2019.04.29
동적 계획법 기초  (0) 2019.04.08
그래프(DFS, BFS)  (0) 2019.04.04
브루트 포스  (0) 2019.04.01

+ Recent posts