오늘은 유니티 설치하는방법을 알아보겠습니다.

저 또한 처음에 유니티 설치하는법은 쉽다고 대충 설치했다가 나중에 더 편한방법을 찾게되어 포스팅합니다.

 

 

1. 우선 유니티 사이트에 들어가줍니다 ( https://unity.com/kr )

https://unity.com/kr 의 화면입니다 2020년 3월 기준

2. 시작하기버튼을 눌러서 개인 탭으로 들어가줍니다. 저희는 Personal 버전으로 시작 할 것입니다.

https://store.unity.com/kr/download-nuo 의 화면중 시작하기의 버튼

3. 스토어에서 시작하기버튼을 눌러서 동의 및 다운로드 하여줍니다.

유니티 허브 설치파일의 모습

4. 다운로드한 설치파일을 실행시켜줍니다.

5. 동의하고 설치를 진행하여 설치를 완료 합니다.

유니티 허브의 첫 실행화면. 좌측탭중에 학습탭이 적용된 모습입니다

짠! 이제 저희는 유니티를 실행시킬수있는 Hub를 가지게 되었습니다.

가장먼저 할것은 저희가 원하는 버전의 Unity를 허브에 추가해 주어야합니다.

좌측의 탭중에 설치 탭을 누르게되면 설치된 Unity 버전이 없다고 나옵니다.

우측위의 추가버튼을 눌러서 추가를 해 봅시다.

추가버튼을 눌렀을때 나오는 창

유니티로 개발을 하면 버전간 호환을 신경써 주어야 하는데

새로운버전을 쓰게되면 있던기능이 없어지거나 새로운 기능이 추가되는등 이슈가 발생합니다.

그래서 저희는 뒤에 (LTS)써있는 버전을 사용할 것입니다. 

LTS버전은 이미 개발이 완료되어서 새로운 기능을 더이상 추가하지않고 오류나 문제점만 찾아서 처리를 해줍니다.

따라서 LTS 버전중에 가장 최신인 2018 버전을 선택 한 후에 [다음] 버튼을 눌러줍니다.

Unity 모듈 추가 화면

이제 모듈을 추가할 시간입니다.

쉽게 말해 어떤  환경에서 어떤 목적으로 쓸것인지 모듈을 추가해주는 화면입니다.

Mac으로 개발 할 경우 Mac Build Support, Windows로 개발 할 경우 Windows Build Support를 체크 해주셔야합니다. 

저는 안드로이드 폰게임을 만들기위하여 Android Build Support 도 추가해주겠습니다.

증강현실의경우 Vuforia 등 다른 목적이 있으신분은 그 모듈에 체크를 해주시고 완료버튼을 눌러주시면 되겠습니다.

저는 윈도우로 안드로이드 게임을 개발할 목적이기때문에

모듈들중에

모듈을 선택한 모습

이 두 가지만 선택후에 완료버튼을 눌러 주겠습니다.

설치중인 화면

자 완료버튼을 눌렀다면 설치중인 화면이 보일것입니다. 설치가 끝날때 까지 기다려 줍니다. Hub시간보다 꽤 걸리니 인내심을 가져야 합니다. 

설치가 완료된 모습

설치가 완료되면 저희가 선택했던 버전 이름과, 추가한 모듈이 아이콘으로 아래에 이쁘게 표시가 됩니다.

이제 좌측에 프로젝트 탭으로 가시면 저희가 생성한 버전으로 프로젝트를 새로 생성 할 수 있습니다.

 

프로젝트탭에서 새로생성 버튼 옆의 화살표를 누르면 설치된 버전을 선택 할 수 있다.

설치 탭에서 여러 버전들을 추가해 두었다면 새로 생성 버튼 옆의 화살표를 눌러서 다양하게 선택 할 수 도 있습니다.

이미 만들어진 프로젝트를 추가버튼을 통하여 추가 할 수도 있습니다.

새 프로젝트를 생성하는 화면

 

이제 설치는 끝났습니다. 

원하는 템플릿을 선택하여 이름과 경로를 저장한뒤 유니티의 세계로 빠져봅시다.

'unity' 카테고리의 다른 글

앞으로 업데이트될 목록  (0) 2019.11.12
비쥬얼에서 유니티 네임스페이스 인식  (0) 2018.10.23

1. 유니티 설치절차

2. 각부위별이름

3. 기본 공굴리기예제

4. 서바이벌 슈터 - 캐릭터바꾸기 응용

5-1. 포톤

5. 탱크게임

6. 응용 네트워크게임( 내가만든거)

7. VR

8. 오브젝트풀

9. 슬라이스

10.리듬게임

 

 

'unity' 카테고리의 다른 글

1. [Unity] 유니티 설치하기  (0) 2020.03.31
비쥬얼에서 유니티 네임스페이스 인식  (0) 2018.10.23

이번 문제는 으딘가에서 나왔을법한 숨바꼭질 5입니다

수빈이가 이동할수있는곳을 다 찍어두고 

동생을 이동시키면서 시간의 최소값을 찾아보는 방식입니다.


특이점은 수빈이를 이동시킬때

oldTime[2][500000] 으로 맵을 만들고 (풀이에서는 500004로 정해놨음 )

홀수일때 짝수일대로 나눕니다. 그이유는

홀수는 홀수끼리 2씩 차이가나죠? 1 - 3 - 5 - 7 

근데 수빈이는 2턴을 지나게되면 제자리로 올수있는 기능이있습니다.

따라서 최소시간동안 동생이 지나갈곳에 도착을 하여서 대기를 하고있으면 동생은 알아서 찾아온다 이말입니다.

하지만 수빈이가 짝수시간에 도착을 한곳에 동생이 홀수시간에 도착을하면 절대로 만날수가없겠죠? (바로옆칸인데 못만나는 슬픔 ㅜ )

그래서 짝수시간에 도착했을때랑 홀수시간에 도착했을때 , 이두가지를 저장하기위하여 2줄짜리 배열을 만들어줍니다.


처음에 맵을 -1로 초기화시킨뒤에

초기 수빈이의 위치를 0 으로 놔줍니다. ( 초기 위치가 0이기때문에 맵자체를 0으로 해두면 오류나서 -1로함)

그리고 이제 이동하면서 -1인경우 숫자를채워줍니다 bfs기때문에 작은숫자부터 차근차근 잘들어가겠죠?

수빈이가 홀수타임때, 수빈이가 짝수타임때 위치에 시간을 저장해줍니다.


그리고 동생을 돌리면서 

동생의 현재 시간보다 작은값이 들어있으면 ( -1은 제외시킴)

그때 시간을 따로 저장해둡니다.

그리고 계속 찾아갑니다.뒤에 그 시간보다 짧은시간에 만난 친구가 있을수도있으니


그리고 마지막에 그 최소값을 출력해주면됩니다.

물론 처음 시간인 500004 에서 하나도 안바뀌었으면 만나지않는거니까 -1을 출력해줍니다

코드는개판이지만

제가 찾았을때 딴데 없길래..ㅎ...

그럼 2만


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
#define _CRT_SECURE_NOWARNINGS
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
queue<pair<intint>> myq;
int oldTime[2][500004= { 0, };
int oldP, youngP;//형 +-1,x2  동생  +1 +2 +3 +4 +5
int qsize, youngT = 0;
int place = 0;
int minT = 500004;
bool isin(int a) {
    if (a < 0 || a>500000)return false;
    else return true;
}
void precheck(int old, int time) {
    if (isin(old - 1)) {
        if (oldTime[(time + 1) % 2][old - 1< 0)//-1 부분 있냐
        {
            oldTime[(time + 1) % 2][old - 1= time + 1;
            myq.push(make_pair(old - 1, time + 1));
        }
    }
    if (isin(old + 1)) {
        if (oldTime[(time + 1) % 2][old + 1< 0 && isin(old + 1))//+1 부분 있냐
        {
            oldTime[(time + 1) % 2][old + 1= time + 1;
            myq.push(make_pair(old + 1, time + 1));
        }
    }
    if (isin(old * 2)) {
        if (oldTime[(time + 1) % 2][old * 2< 0 && isin(old * 2))//*2부분 있냐
        {
            oldTime[(time + 1) % 2][old * 2= time + 1;
            myq.push(make_pair(old * 2, time + 1));
        }
    }
}
int main() {
    cin >> oldP >> youngP;
    for (int i = 0; i < 500004; i++) { // -1로 초기화
        oldTime[0][i] = -1;
        oldTime[1][i] = -1;
    }
    myq.push(make_pair(oldP, 0)); //처음값넣기
    oldTime[0][oldP] = 0// 출발위치 0으로 초기화
    while (!myq.empty()) {
        qsize = myq.size();
        for (int i = 0; i < qsize; i++) {
            precheck(myq.front().first, myq.front().second);
            myq.pop();
        }
    }
    place = youngP;
    while (place <= 500000) { //동생돌리기
        if (oldTime[youngT % 2][place] > -1 && oldTime[youngT % 2][place] <= youngT) {
            minT = min(minT, youngT);
        }
        youngT++;
        place += youngT;
    }
    if (minT == 500004)cout << -1;
    else cout << minT;
    return 0;
}
cs



'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글

백준 9019번 DSLR  (0) 2019.02.28
백준 14499번 주사위굴리기  (0) 2019.02.28
백준 7569번 토마토  (0) 2019.02.20
백준 2178번 미로찾기  (0) 2019.02.20
KMP 알고리즘  (0) 2019.02.15

내 입장에서 느낀대로 쓰겠음.


방 - 좋았음. 그냥 좋은 모텔쓰는느낌. 냉장고에 음료수 몇개 들어있고 큰침대있고 티비도 잘나오긴하는데 가끔끊김 근데 별로 상관안함. 따로 독채써서 뜨거운물 제한없이 나온다고하는거보니 다른곳은 온수제한 있나봄 ㅋ


파티 - 고기 초벌해서나와서 나름 안질기고 맛있음. 고기 달라고하면 계속주니까 양호. 근데 술이 생맥주. 나는 맥주도 싫어하는데 여기 자체에서 소주를팜 4천원에. 뭐 사업자 어쩌고 세금 어쩌고해서 4천원에 판다는데 거기부터 맘에안듬. 편의점? 차타고 금방임. 근데 걸어서 아무것도 안보여서 가기힘듬.


자기소개시킴. 얘기하던도중에 끊고 본인들 사업얘기함. 대충 어디도 많이 놀러와주세요 하면 끝인데 알파카고 뭐고 관심도없는 tmi 지려서 분위기 극하락함. 그래서 사람들 화장실도 못가고 강제착석. 얘기 끝나자마자 화장실 빤스런. 게다가 화장실 공사중이어서 각자 객실화장실 ㅋㅋㅋ 생맥주만 무제한이어서 오줌 존나 싸야됨. 그래서 생맥주 리필한번밖에안하고 그냥 소주만시켜먹음


나와서 흡연자들 담배피면서 tmi 다들공감함. 분위기 깨진것도.

물론 사람들과 얘기는 여기 게하에서 관리하는게아니라 각자 스타일이기때문에 재밌었음.


근데 게하쪽에서 개입만하면 무슨 초중딩때 갔던 수련회임.

다른 게하에서 났던 사고때문에 조심하는거라고 엄하게 하는거같은데

ㄹㅇ 수련회 조교느낌.


다음날갔던 게하는 프리하고 그러면서도 더재밌고 더 안전하고 했던거같은데 나름 시내쪽에있어서 앞에 편의점도 바로 있고 큰길도 있고.

어린왕자는 주변에 아무것도 뵈는게없고 숙소뿐임. 이래서 더위험하다고 통제를한다? 그럼 이해는함. 하지만 다시는안감. 지리적위치가 구린거니까.


말 , 동물? 신기하긴함. 근데 한번보고끝임 메리트없음.

다음게하가 마침 다른게하 스태프들 놀러온 게하였는데 그래서 물어봤는데도 평이 안좋음.


친구랑갔는데 어린왕자 자체 2차 말고 그다음은 무조건 파토임 닥치고 숙소가서 자야됨.

숙소내에도 주류반입하지말라하고

으름장 오지게 놓음. 퇴실시킨다 어떻게 한다.

무서워서 오줌또지림


솔직히 두번째갔던곳은 어린왕자보다 시설안좋았음. 화장실도 완전 구식이고. 근데 다시고르라고하면 어린왕자는안감.

두번째게하가 좋아서가아니라 어린왕자가 다시는 가기싫음 ㅋ


나만그런가?하고 찾아보니 악플이나 안좋은 리뷰가없음.

그러던도중 한게시물에서 왜 자기가 안좋다고 한 댓글 지웠냐고 반항하는 댓글이 보임.

그게 사실이라면 지금까지 악플은 다 삭제한걸로 보여서 거기에 댓글로 안달고 여기에 글로 싸지름


우리에게 동의 안구하고 사진이랑 동영상 맘대로 올림. 다른글들에는 모자이크되어있는거보니 사람들이 모자이크하라고 화내면 그때서야 하는수준인듯.


뭐 걍 다른후기들보고 가려는사람들은가고

나는 안갈런다. 덕분에 제주도에서 하룻밤날림.

'etc.\' 카테고리의 다른 글

쿠팡차 후진소리  (0) 2018.07.07
나의 첫번째 메인  (0) 2018.06.02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    bool next_permutation(int *a, int n) {
        int i = n - 1l
            while (i > 0 && a[i - 1] >= a[i]) i -= 1;
        if (i <= 0) return false; // 마지막 순열
        int j = n - 1;
        while (i<j) {
            swap(a[i], a[j]);
            i += 1; j -= 1;
        }
        return true;
    }
cs

N개중에 일부를 선택해야하는경우.

재귀호출이나 비트마스크 사용하면 더쉬움

그래서 잘안씀

123더하기 9095번문제

 

1~N까지로 이루어진 순열


123

4123


겹치는수없음

크기는항상 N이 되어야하고 순서가 중요


N! 


순열을 사전순으로했을때

첫순열 : 오름차순

마지막 ; 내림차순


예)

123

132

213

231

312

321


다음순열 -> 사전순으로했을때 사전순으로 다음에 오는 순열

C++ STL의 algorithm에는 이미 next_permutation 과 prev_permutation(이전순열) 이 존재함. 자바에없음 개꿀


다음순열 -> 순열의 마지막수에서 끝나는 가장 긴 감소수열 찾으면됨


크기가 n인 배열 a의 다음순열


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    bool next_permutation(int *a, int n) {
        int i = n - 1l
            while (i > 0 && a[i - 1] >= a[i]) i -= 1;
        if (i <= 0) return false; // 마지막 순열
        int j = n - 1;
        while (i<j) {
            swap(a[i], a[j]);
            i += 1; j -= 1;
        }
        return true;
    }
cs

차이를최대로 10819 문제   안품
외판원순회2  10971 문제   품
로또         6603 문제   품
연산자 끼워넣기 14888문제 품



'재미있는공부이야기 > 혼자끄적' 카테고리의 다른 글

브루트포스  (0) 2019.02.26
수학  (0) 2019.02.26
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
queue<pair<intstring>> dongdong;
int ca, allsize;
int q, aw, start;
int checked[10000= { 0, };
int temp;
int qsize;
void cal(int a, int b) {
    if (dongdong.front().first == aw) {
        cout << dongdong.front().second << endl;
        qsize = 0;
        queue < pair<intstring> >emptyq;
        swap(dongdong, emptyq);
        memset(checked, 0sizeof(checked));
    }
    if (a != b) {
 
        if (a * 2 >= 10000) {
            start = a * 2 % 10000;
            if (checked[start] != 1) {
                dongdong.push(make_pair(start, dongdong.front().second + "D"));
                checked[start] = 1;
            }
        }
        else {
            start = a * 2;
            if (checked[start] != 1) {
                dongdong.push(make_pair(start, dongdong.front().second + "D"));
                checked[start] = 1;
            }
 
        }
        if (a == 0) {
            start = 9999;
            if (checked[start] != 1) {
                dongdong.push(make_pair(start, dongdong.front().second + "S"));
                checked[start] = 1;
            }
 
        }
        else {
            start = a - 1;
            if (checked[start] != 1) {
                dongdong.push(make_pair(start, dongdong.front().second + "S"));
                checked[start] = 1;
            }
        }
        start = a * 10 % 10000 + a / 1000;
        if (checked[start] != 1) {
            dongdong.push(make_pair(start, dongdong.front().second + "L"));
            checked[start] = 1;
        }
        start = a % 10 * 1000 + a / 10;
        if (checked[start] != 1) {
            dongdong.push(make_pair(start, dongdong.front().second + "R"));
            checked[start] = 1;
        }
    }
}
int main() {
    //freopen("test.txt", "r", stdin);
    cin >> ca;
 
 
    for (int k = 0; k < ca; k++) {
        cin >> q >> aw;
 
        dongdong.push(make_pair(q, ""));
 
        while (!dongdong.empty()) {
            qsize = dongdong.size();
 
            for (int i = 0; i < qsize; i++) {
                cal(dongdong.front().first, aw);
                if (!dongdong.empty())dongdong.pop();
            }
 
        }
    }
 
}
 
cs


DSLR 다시풀어봐도 몇번 틀리고 ..

'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글

백준 17071번 숨바꼭질 5  (0) 2019.03.21
백준 14499번 주사위굴리기  (0) 2019.02.28
백준 7569번 토마토  (0) 2019.02.20
백준 2178번 미로찾기  (0) 2019.02.20
KMP 알고리즘  (0) 2019.02.15
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
 
int mapW, mapH, placeX, placeY, cnt;
int map[27][27= { 0, };
int moveM[1004= { 0, };
int dice[6= { 0,0,0,0,0,0 };
int temp = 0;
bool isin(int a,int b) {
    if (a >= 0 && a < mapW&&>= 0 && b < mapH)return true;
    else return false;
}
int roll(int a) {
    switch (a) {
    case 1:
        //cout << " 오른쪽"<<endl;
        temp = dice[1];
        dice[1= dice[2];
        dice[2= dice[3];
        dice[3= dice[5];
        dice[5= temp;
        cout << dice[5<< endl;
        break;
    case 2:
        //cout << "왼쪽" << endl;
 
        temp = dice[3];
        dice[3= dice[2];
        dice[2= dice[1];
        dice[1= dice[5];
        dice[5= temp;
 
        cout << dice[5<< endl;
        break;
    case 3:
        //cout << "위로"<<endl;
        temp = dice[0];
        dice[0= dice[2];
        dice[2= dice[4];
        dice[4= dice[5];
        dice[5= temp;
        cout << dice[5<< endl;
        break;
    case 4:
        //cout << "아래로"<<endl;
        temp = dice[5];
        dice[5= dice[4];
        dice[4= dice[2];
        dice[2= dice[0];
        dice[0= temp;
        cout << dice[5<< endl;
        break;
    }
    return 0;
}
void search(int k) {
    for (int i = 0; i < cnt; i++) {
        
        if (moveM[i] == 1 && isin(placeX, placeY+1)) {
            roll(1);
            if (map[placeX][placeY+1== 0) map[placeX][placeY + 1= dice[2];
            else {
                dice[2= map[placeX][placeY + 1];
                map[placeX][placeY + 1= 0;
            }
            //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl;
            placeY++;
        }
        if (moveM[i] == 2 && isin(placeX, placeY-1)) {
            roll(2);
            if (map[placeX][placeY-1== 0) map[placeX][placeY-1= dice[2];
            else{ dice[2= map[placeX][placeY-1];
            map[placeX][placeY - 1= 0;
            }
            //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl;
            placeY--;
        }
        if (moveM[i] == 3 && isin(placeX-1, placeY)) {
            roll(3);
            if (map[placeX-1][placeY] == 0) map[placeX-1][placeY] = dice[2];
            else{ dice[2= map[placeX-1 ][placeY];
            map[placeX-1][placeY] = 0;
            }
            //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl;
            placeX--;
        }
        if (moveM[i] == 4 && isin(placeX+1, placeY)) {
            roll(4);
            if (map[placeX+1][placeY] == 0) map[placeX+1][placeY] = dice[2];
            else {dice[2= map[placeX+1][placeY];
            map[placeX+1][placeY ] = 0;
            }
            //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl;
            placeX++;
        }
        //cout << "현재아랫면" << dice[2] << endl;
    }
}
int main() {
    //freopen("test.txt", "r", stdin);
    cin >> mapW >> mapH >> placeX >> placeY >> cnt;
    for (int i = 0; i < mapW; i++) {
        for (int j = 0; j < mapH; j++) {
            cin >> map[i][j];
 
        }
    }
    for (int i = 0; i < cnt; i++) {
        cin >> moveM[i];
    }
 
    search(0);
}
cs


원시적인코드 dice[] 배열에 현재 좌우앞뒤위아래 상황을 다 저장한다

'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글

백준 17071번 숨바꼭질 5  (0) 2019.03.21
백준 9019번 DSLR  (0) 2019.02.28
백준 7569번 토마토  (0) 2019.02.20
백준 2178번 미로찾기  (0) 2019.02.20
KMP 알고리즘  (0) 2019.02.15

모든 경우의수  다해보는거


ex) 비번 4자리면

0000 부터 9999까지

총 1만가지


시도해보는 경우의수가 중요


비번이 12자리이고 

경우의수가 0이 12개있는거부터 9가 12개있는거까지 1조 가지 경우의수


1.문제의 가능한 경우의 수를 계산해본다 -> 손으로

2. 가능한 모든방법을 다 만들어본다. -> 빠짐없이해야됨. 그냥해보기, for문, 순열, 재귀, 비트마스크

3. 각각의 방법을 이용해서 답을 구해본다. 


시간복잡도 O(경우의수 x 방법1개를 시도해보는데 걸리는시간복잡도)


걍 다해보기 -) 2309 일곱난쟁이 

1476 날짜계산 ( 중국인의 나머지정리? 도 있긴한데 안중요)

14500 테트로미노


'재미있는공부이야기 > 혼자끄적' 카테고리의 다른 글

N중포문 순열사용하기  (0) 2019.02.28
수학  (0) 2019.02.26


수학


1. 나머지연산 

정답을 구할때 너무크면 나머지로 출력하는문제많음.

최종에서하지말고

매번나머지해도됨


나머지연산은 덧셈곱셈에 닫혀있고, 뺄셈도있긴한데 다름

나누기연산은 안됨 (6/3)%3 이 그 예

10403문제

빼기예제 (6-5)%3 = 1

파이썬에서는 1나오는데

C++ 이나 java는 -2가 나옴

그래서 각자나머지한거에서 나누는수 한번 더 해주면 성립


페르마의소정리

(a/b) %c

 = (a x b^(c-2) ) % c

 (단 c는 소수, a 와 b는 서로소)



2. 최대공약수


정답이 분수형태일때 기약분수 나타낼때

GCD


int g = 1;

for(int i = 2; i<=min(a,b) ; i++){

if(a%i == 0 && b % i ==0 ) {

g = i ;

}

}

시간복잡도 O(N)

유클리드 호제법이 더좋음

 GCD(a,b) = GCD(b,a%b)

재귀쓸때

int gcd(int a, int b){

if(b==0){

return a;

 } else{

return gcd(b,a%b);

}

}

유클리드호제법 시간복잡도 O(log N)

 안쓸대

int gcd(int a, int b) {

while(b!=0){

int r = a%b;

a =b;

b =r;

}

return a;

}

이것도 시간복잡도 O(log N)


GCD(a,b,c)  = GCD(GCD(a,b),c)


최소공배수



3. 소수


약수가 1이랑 자기자신

1) 어떤수가 소수이닌지 판별

2보다크고 N보다작은것들로 나눠

2보다크고 N/2보다 작은것들로 나눠

2보다크고 루트N보다 작은것들로 나눠 O(루트N)


2) N보다 작거나 같은 소수 찾아내기( N까지수를 루트N으로 조지니까 O(N루트N)


에라토스테네스의 체

2~100까지는 2 3 5 7 로 인해서 다지워짐  


int prime[100];

int pn = 0;

bool check[101] ;

int n = 100;

for(int i = 2;  i<=n ; i ++){

if(check[i] == false){

prime[pn++]=i;

for(int jk =i*i; j<=n; j+=i){

check[j] = true;

}

}

}

이미검사한 영역에대해서 당겨서 검사하는거 중요

시간복잡도 O(Nlog(logN))


골드바흐의 추측

2보다 큰 모든 짝수는 두 소수의 합으로 표현 가능하다.

위문장에 3을 더하면

5보다 큰 모든 홀수는 세소수의 합으로 표현 가능하다


진짜 추측임 10의 18승 이하에서는 참인것이 증명됨

결국 에라토스 체에서 false로 그 배열 자리에 소수인놈 저장해놨으니

수가 크면 한쪽소수 정해놓고 p+q = N 이런식으로해서 p 정해보고

 N-p가 false인지 체크해보면됨

'재미있는공부이야기 > 혼자끄적' 카테고리의 다른 글

N중포문 순열사용하기  (0) 2019.02.28
브루트포스  (0) 2019.02.26

아직 좌우앞뒤위아래 매커니즘이 뇌에 안박혀있어서 굉장히 원시적입니다. 


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
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include <queue>
 
using namespace std;
int box[104][104][104= { 0, };
int x, y, z;
queue<pair<pair<intint>int>> myq;
 
bool isin(int a, int b, int c) {
    if (a >= 0 && b >= 0 && c >= 0 && a < x&&< y&&< z&&box[a][b][c] == 0)return true;
    else return false;
}
 
void bfs(int a, int b, int c) {
    if (isin(a - 1, b, c)) {
        box[a - 1][b][c] = 1;
        myq.push(make_pair(make_pair(a - 1, b), c));
    }
    if (isin(a + 1, b, c)) {
        box[a + 1][b][c] = 1;
        myq.push(make_pair(make_pair(a + 1, b), c));
    }
    if (isin(a, b - 1, c)) {
        box[a][b - 1][c] = 1;
        myq.push(make_pair(make_pair(a, b - 1), c));
    }
    if (isin(a, b + 1, c)) {
        box[a][b + 1][c] = 1;
        myq.push(make_pair(make_pair(a, b + 1), c));
    }
    if (isin(a, b, c - 1)) {
        box[a][b][c - 1= 1;
        myq.push(make_pair(make_pair(a, b), c - 1));
    }
    if (isin(a, b, c + 1)) {
        box[a][b][c + 1= 1;
        myq.push(make_pair(make_pair(a, b), c + 1));
    }
}
int main() {
    //freopen("test.txt", "r", stdin);
    cin >> x >> y >> z;
 
    for (int i = 0; i < z; i++) {
        for (int j = 0; j < y; j++) {
            for (int k = 0; k < x; k++) {
                cin >> box[k][j][i];
                if (box[k][j][i] == 1) {
                    myq.push(make_pair(make_pair(k, j), i));
                    
                }
 
            }
        }
    }
 
    
    int qsize, cnt = 0;
 
    while (!myq.empty()) {
 
        qsize = myq.size();
 
        for (int i = 0; i < qsize; i++) {
            bfs(myq.front().first.first, myq.front().first.second, myq.front().second);
            myq.pop();
        }
        if (myq.size() > 0)cnt++;
 
    }
    for (int i = 0; i < z; i++) {
        for (int j = 0; j < y; j++) {
            for (int k = 0; k < x; k++) {
                if (box[k][j][i] == 0) {
                    cout << "-1";
                    return 0;
                }
            }
        }
    }
    cout << cnt;
}
 
cs



'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글

백준 9019번 DSLR  (0) 2019.02.28
백준 14499번 주사위굴리기  (0) 2019.02.28
백준 2178번 미로찾기  (0) 2019.02.20
KMP 알고리즘  (0) 2019.02.15
3장. 문자열  (0) 2019.02.13

+ Recent posts