2019. 6. 2. 15:07
728x90

Power digit sum

Problem 16

215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.

What is the sum of the digits of the number 21000?


2의 1000제곱의 각 자리 수를 모두 더할 경우 몇이 되는지 구하는 문제.
1. 필요한 만큼 배열을 할당한다. 
2. 아래에 기술한 내용을 지수만큼 반복한다.
 - 배열 각 요소에 2를 곱한다.
 - 값이 10 이상인 요소는 다음 자리에 10을 나눈 몫을 더해주고 나머지만 남긴다.
3. 배열에 있는 각 요소의 값을 모두 더한다.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

백준 2557 - Hello World  (0) 2019.07.20
프로젝트 오일러 문제 17  (0) 2019.06.02
프로젝트 오일러 문제 15  (0) 2019.06.01
프로젝트 오일러 문제 14  (0) 2019.01.05
프로젝트 오일러 문제 13  (0) 2018.12.23
Posted by 아야카
2019. 6. 1. 10:11
728x90

Lattice paths

Problem 15

Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.

How many such routes are there through a 20×20 grid?

20×20크기의 격자에서 왼쪽 위 시작 점부터 오른쪽 아래 끝 점까지 도달 할 수 있는 경로의 수를 구하기.
목표 지점의 왼쪽까지 갈 수 있는 경로와 위쪽까지 갈 수 있는 경로의 합으로 답을 구할 수 있다.
문제에서는 격자의 크기를 면의 수로 표현하고 있지만 실제 처리는 모서리를 기준으로 하므로 1칸 더 크게 계산한다.

1

1

1

1

2

3

1

3

6



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 17  (0) 2019.06.02
프로젝트 오일러 문제 16  (0) 2019.06.02
프로젝트 오일러 문제 14  (0) 2019.01.05
프로젝트 오일러 문제 13  (0) 2018.12.23
프로젝트 오일러 문제 12  (0) 2018.11.24
Posted by 아야카
2019. 3. 5. 11:29
728x90

국내에서 자료를 찾지 못해 기록용으로 남기는 글.

 

노래 - https://youtu.be/OmSN-AOnZwU 

가사 출처 - http://www.kuwo.cn/yinyue/7083430 

 

离别的眼泪我还不懂

回忆淡淡的就像风

期待一道彩虹 连接我们的天空

 

儿时的脚踏车在回忆里褪了色

还记得你曾经最喜欢的那首歌

记得那种快乐的颜色

 

黄昏的夕阳勾勒出来的景象

你微笑看远方

一颗星能许多少愿望 拥有多少梦想

 

你低声说不想离开

而我还不明白

时间拉着我们跑向不同的天空

实现不同的梦

 

在夕阳下最后的拥抱

记得你甜美的心跳

写下约定的墙角 是最美丽的记号

 

离别的眼泪我还不懂

回忆淡淡的就像风

期待一道彩虹 连接我们的天空

 

你低声说不想离开

而我还不明白

时间拉着我们跑向不同的天空

实现不同的梦

 

在夕阳下最后的拥抱

记得你甜美的心跳

写下约定的墙角 是最美丽的记号

 

离别的眼泪我还不懂

回忆淡淡的就像风

期待一道彩虹 连接我们的天空

 

如果爱变成剪不断的思念

止不住停不下的时间

等到雨停之后

那一道彩虹 把回忆带到永远

 

在夕阳下最后的拥抱

记得你甜美的心跳

写下约定的墙角 是最美丽的记号

 

离别的眼泪我还不懂

回忆淡淡的就像风

期待一道彩虹 连接我们的天空

 

在夕阳下最后的拥抱

记得你甜美的心跳

写下约定的墙角 是最美丽的记号

 

离别的眼泪我还不懂

回忆淡淡的就像风

期待一道彩虹 连接我们的天空

728x90
Posted by 아야카
2019. 3. 5. 11:27
728x90


Heroes of might and magic II

필드 화면에서 치트키에 해당하는 숫자를 입력한다.

911 : 미션 승리
1313 : 미션 패배
32167 : 영웅에게 블랙드래곤 5마리가 주어짐
8675309 : 맵 그림자 모두 제거




Heroes of might and magic III

필드 화면에서 Tab 키를 입력한 후 치트키를 입력하고 Enter키 입력
특정 영웅에게만 적용되는 치트키는 해당 영웅을 선택한 상태에서 치트키를 입력



에라시아의 부흥 (Restoration of Erathia)

 nwconlyamodel : 모든 건물 건설
 nwcsirrobin : 미션 실패
 nwctrojanrabbit : 미션 성공
 nwcavertingoureyes : (영웅) 빈 슬롯에 아크엔젤 5마리씩 추가
 nwcfleshwound : (영웅) 빈 슬롯에 데스 나이트 10마리씩 추가
 nwcantioch : (영웅) 텐트, 탄약 수레, 쇠뇌가 추가
 nwcigotbetter : (영웅) 레벨업
 nwccastleanthrax : (영웅) 행운+3 버프
 nwccoconuts : (영웅) 이동력 무한
 nwcmuchrejoicing : (영웅) 사기+3 버프
 nwcalreadygotone : 성배지도 완성본 확인 가능 
 nwcgeneraldirection : 맵 그림자가 모두 제거된다.
 nwcshrubbery : 금 100000, 다른 자원 100 추가
 nwctim : (영웅) 올 스펠 + 마나 999



아마겟돈 블레이드 (Armageddon's Blade)

 nwccoruscant : 모든 건물 건설
 nwcpadme : (영웅) 빈 슬롯에 아크엔젤 5마리씩 추가
 nwcdarthmaul : (영웅) 빈 슬롯에 데스 나이트 10마리씩 추가
 nwcr2d2 : (영웅) 텐트, 탄약 수레, 쇠뇌가 추가
 nwcquigon : (영웅) 레벨업
 nwcpodracer : (영웅) 이동력 무한
 nwcprophecy : 성배지도 완성본 확인 가능
 nwcrevealourselves : 맵 그림자가 모두 제거된다.
 nwcwatto : 금 100000, 다른 자원 100 추가
 nwcmidichlorians : (영웅) 올 스펠 + 마나 999



쉐도우 오브 데스 (Shadow of Death)

 nwczion : 모든 건물 건설
 nwcbluepill : 미션 실패
 nwcredpill : 미션 성공
 nwctrinity : (영웅) 빈 슬롯에 아크엔젤 5마리씩 추가
 nwcagents : (영웅) 빈 슬롯에 데스 나이트 10마리씩 추가
 nwclotsofguns : (영웅) 텐트, 탄약 수레, 쇠뇌가 추가
 nwcneo : (영웅) 레벨업
 nwcnebuchadnezzar : (영웅) 이동력 무한
 nwcoracle : 성배지도 완성본 확인 가능
 nwcwhatisthematrix : 맵 그림자가 모두 제거된다.
 nwcignoranceisbliss : 맵 그림자가 생성된다.
 nwctheconstruct : 금 100000, 다른 자원 100 추가
 nwcthereisnospoon : (영웅) 올 스펠 + 마나 999
 nwcfollowthewhiterabbit : (영웅) 행운+3 버프
 nwcmorpheus : (영웅) 사기+3 버프

728x90
Posted by 아야카
2019. 2. 17. 15:29
728x90

<요약>

전처리문
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

누수 확인
_CrtDumpMemoryLeaks();

할당 지점 브레이크
_crtBreakAlloc = 할당번호;

메모리 상태 체크
_CrtMemState 구조체에 담기
_CrtMemCheckpoint(&구조체변수이름); 으로 체크


전처리문으로 다음 내용을 추가한다.
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

메모리 누수를 확인할 시점에 아래 함수를 작성한다.
_CrtDumpMemoryLeaks();

_CrtDumpMemoryLeaks()은 메모리 누수가 있는 경우 1을 리턴, 없을 경우 0을 리턴한다.
메모리 누수에 대한 상세한 정보는 디버그 창에서 확인할 수 있다.

{166}은 메모리 할당 번호
at 뒤에 있는 0x0007A828은 메모리 주소
16 bytes long은 누수된 메모리 크기
Data: 뒤에 있는 내용은 메모리 내용이다.

_CrtDumpMemoryLeaks()가 실행되는 시점에 메모리 누수 여부를 체크한다.
프로그램 전체에 대해 확인하고 싶다면 프로그램이 종료되는 부분에 작성해두도록 한다.

누수가 발생하는 메모리 할당 번호에서 디버깅 중단점이 발생하기 원한다면 해당 메모리의 할당시점보다 이전 시점에 아래 내용을 작성해두면 된다.
_crtBreakAlloc = 메모리 할당 번호;
그러면 아래와 같이 메모리 할당 번호에 해당하는 지점에서 브레이크 포인트가 걸린다.


메모리 누수가 얼마나 일어나는가에 대해 콘솔에서 확인을 해보고 싶은 경우에는 _CrtMemState 구조체를 이용해보는 것도 방법일 수 있다.
_CrtMemState는 다음과 같이 구성되어 있다.

#define _MAX_BLOCKS      5
typedef struct _CrtMemState
{
    struct _CrtMemBlockHeader* pBlockHeader;
    size_t lCounts[_MAX_BLOCKS];
    size_t lSizes[_MAX_BLOCKS];
    size_t lHighWaterCount;
    size_t lTotalCount;
} _CrtMemState;

메모리 상태를 체크할 시점에
_CrtMemCheckpoint(&구조체 변수 이름) 함수를 사용하면 해당 시점의 메모리 정보가 구조체에 입력된다.

이를 통해 특정 시점 전 후의 상태를 기록하여 이 둘을 비교하면 메모리 누수가 어느정도 발생했는지 파악할 수 있다.
구조체 구성 중 lCounts는 메모리에 할당된 변수의 개수, lSizes는 메모리에 할당된 용량의 크기를 나타낸다.


참고 자료: https://docs.microsoft.com/ko-kr/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2017

728x90
Posted by 아야카
2019. 1. 21. 03:15
728x90

POCU에서 input redirection 설정에 대해 언급이 됐었는데 실제 적용이 어떻게 되는가에 대해서는 언급이 되지 않는 것 같아
직접 알아보고 파악한 부분에 대해 블로그 포스팅으로 남긴다.


<설정>
1. 프로젝트 속성 -> 디버깅 에 들어간다.
2. 명령 인수에 입력으로 쓸 파일 이름을 입력한다. (빨간 박스 친 부분)
3. 빌드하여 디버깅 모드로 실행하면 명령 인수에 입력한 파일에 입출력이 진행된다.


<예시>
테스트용 코드

int main()
{
	string text;
	string trash;
	while(cin.eof() == false)
	{
		cin >> text;
		if (cin.fail() == true)
		{
			cin.clear();
			cin >> trash;
		}
		else
		{
			cout << text << endl;
		}
	}
	return 0;
}


입력파일 샘플

이 상태에서 디버깅을 실행하면 입력이 필요한 부분은 모두 test.txt 파일 내용을 읽는 것으로 대체된다.



출력 인수를 설정하지 않은 경우

cout으로 출력하는 상황이므로 콘솔창에 모두 출력된다.


출력 인수를 text.txt로 설정한 경우

이렇게 text.txt라는 파일에 출력하게 된다.
이 때 콘솔창에는 아무런 내용도 출력되지 않는다.

728x90

'공부 > C++' 카테고리의 다른 글

Visual Studio와 erase 함수  (0) 2019.09.15
Visual Studio에서 CRT 라이브러리로 C++ 메모리 누수 검사  (0) 2019.02.17
Posted by 아야카
2019. 1. 5. 06:08
728x90

Longest Collatz sequence

Problem 14

The following iterative sequence is defined for the set of positive integers:

n → n/2 (n is even)
n → 3n + 1 (n is odd)

Using the rule above and starting with 13, we generate the following sequence:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.

Which starting number, under one million, produces the longest chain?

NOTE: Once the chain starts the terms are allowed to go above one million.

어떠한 수 n에 대해 콜라츠 추측을 거치는 횟수는 동일하다. 그리고 수의 범위는 100만. 
문제 풀이의 목적은 어디까지나 횟수를 구하는 것이므로 각 수에 대한 콜타츠 추측 횟수를 기록하면 된다. 
예를들어 arrNum 배열이 있다고 할 때 

arrNum[2]는 2 -> 1로 1회.
arrNum[3]는 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2로 6회를 거치고 2는 체인이 1회므로 3의 체인은 7회.
arrNum[6]은 6 -> 3으로 1회를 거치고, 3은 체인이 7회이므로 6의 체인은 8회

이와 같은 방식으로 진행하면 100만까지의 모든 수에 대한 콜라츠 추측을 빠르게 구할 수 있다.
재귀함수를 이용한다면 arrNum[3]의 과정에서 3, 10, 5, 16, 8, 4의 체인 값을 바로 파악할 수 있어 연산 시간을 조금 더 줄일 수 있게 된다.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 16  (0) 2019.06.02
프로젝트 오일러 문제 15  (0) 2019.06.01
프로젝트 오일러 문제 13  (0) 2018.12.23
프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 11  (0) 2018.11.18
Posted by 아야카
2018. 12. 23. 20:42
728x90

Large sum

Problem 13

Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.


50자리 수 100개를 모두 더했을 때의 앞의 열자리 수 구하기 문제.

파이썬 같은 언어에서는 그냥 변수를 모두 더해줘서 앞의 10개만 읽어주면 되지만 C++에서는 일반적인 변수에서는 그리할 수 없으므로 별도의 방법을 모색해야 한다.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 15  (0) 2019.06.01
프로젝트 오일러 문제 14  (0) 2019.01.05
프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 11  (0) 2018.11.18
프로젝트 오일러 문제 10  (0) 2018.11.12
Posted by 아야카