전체 글

PS + hacking
· PS/BOJ
https://www.acmicpc.net/problem/21133 21133번: N-Queen 2 N개의 줄을 출력해야 한다. i번째 줄에는 하나의 정수를 출력해야 하고, 이 정수는 i번째 행에 있는 퀸이 있는 열의 번호이다. www.acmicpc.net 백트래킹 알고리즘을 통해 N-Queen 문제 (9633번)을 풀었다.. N-Queen 2는 N-Queen의 심화 문제일거라 생각하고 문제를 읽었는데, 문제 조건은 그냥 n의 값이 커진 것과 시간제한이 확 줄어든 것을 보고 규칙찾기인가 싶었다. 그래서 하나하나 그려보며 규칙을 찾았던 와중, 가장 처음 찾은 규칙 n == even 이면 arr[2]부터 시작하여 2씩 증가하는 부분에 퀸을 놓고, n을 넘어가면 1부터 시작하여 퀸을 놓으면 된다. n == o..
· PS/BOJ
https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 하노이 탑에 사용하는 장대를 편의상 1, 2, 3번이라 부르면, n-1개의 원반을 모두 1번에서 2번으로, 2번에서 3번으로 옮겨야 한다. 그러므로 n-1개의 원반을 1번에서 3번을 거쳐 2번으로, 그 다음에 2번에서 1번을 거쳐 3번으로 가는 경우를 생각하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include ..
기존 문제는 사과의 구매 목적으로 0보다 작은 수를 전달할 수 없고, 함수를 const로 선언하여 코드의 안정성을 높이는 것이었다. 기존대로 구현 후 문득 떠오른 생각은 만약 구매자의 돈이 엄청나게 많다면? 그래도 사과의 개수는 정해져 있으므로 판매자는 구매자의 돈 전부를 수익으로 낼 수 없다. 즉, 아무리 돈이 많아도 판매자가 얻을 수 있는 수익과 구매자가 지불할 금액은 정해져 있다. 이것까지 한 번 구현해보았다. 근데 이상하게 구현했을수도..? 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 5..
포인터 배열은 말 그대로 포인터로 이루어진 배열이다. 앞서 포스팅한 배열 포인터와는 이름부터가 다르다. int a[3][5]; int b[6]; int* p = b; b[0]의 주소값을 100이라고 한다면, b = 100, b + 1 = 104이다. 마찬가지로, p = 100, p + 1 = 104이다. 이는 앞서 포스팅한 내용과 같다. 왜? 배열로 이루어진 포인터니까. 여기서 볼 것은 a와 같이 선언된 배열이다. p = a라는 선언이 될까? 된다면 좋겠지만 선언은 int (*p)[5] = a; 라고 선언해야한다. 그 이유는 아래와 같다. a의 주소값을 200이라고 한다면, a = 200, a + 1 = 220, a + 2 = 240이 된다. 200 204 208 212 216 220 224 228 23..
일단 알아야 할 첫 번째 잡기술 포인터는 자료형에 상관 없이 4byte를 차지한다. 별로 중요해보이지 않다고 느낄수도 있으나 은근 중요한 내용이다. int a[5] = { 2, 4, 6, 8, 10 }; int* p = a; sizeof(int) = 4; sizeof(a) = 20; sizeof(a[0]) = 4; 이런 식으로 공간을 차지하고 있다. 만약 a = 50을 선언하면? --> 에러가 난다. 그 이유는 배열명은 변수가 아니라 시작 주소를 가지는 상수이기 때문이다. 여기서 중요한 점은 배열명은 시작 주소를 가지는 상수라는 부분이다. a[0]의 주소값을 100번지라고 한다면, a = 100 번지 a + 1 = 104번지 이런식으로 읽을 수 있다. 마찬가지로 포인터식으로 표현하자면, a = 100번지..
C++ 공부 중 포기하게 될 뻔한 두 번째 단계. 여러 강의도 찾아보고 책도 읽어가며 나름 열심히 정리했다. 그 중 가장 이해하기 쉬웠던 강의 https://www.youtube.com/watch?v=nQEvGgt1HZ8 -양주종의 코딩스쿨 중 "C언어 포인터 인강 ① 포인터 때문에 미쳐 버릴 것 같은 당신께 포인터는 넘어설 수 있습니다. 한 번에 이해하기 어렵다면 정상입니다. 반복해서 보시길 권합니다." 아직 완벽히 이해했다고 감히 말할 수는 없지만 그래도 처음 접했을 때보다는 많이 알게 되었다. int a = 20; int* p = &a; 이 선언과 동시에 아래의 메모리가 할당된다. 20 바로 위 그림은 a의 메모리를 그림으로 표현한 것이고 a의 시작 주소를 가리키는 것이 포인터이다. a의 주소값을 ..
sy46
벌크업 중인 cpp