1 of 30

자료구조 프로젝트 발표

10318 정원일

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

2 of 30

>>

목차

1

프로젝트 설명(주제) 및 개발동기

2

기본 로직 (+ 실행화면)

3

사용한 자료구조 (+ 코드 설명)

4

끝 (+ 느낀점)

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

3 of 30

프로젝트 설명

1

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

4 of 30

암호화폐 모의투자 CLI 프로그램

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

5 of 30

>>

왜 만들었을까

Part 1

CLI 프로그램

만들고 싶다

자료구조를

다양하게

사용 해야한다

C언어로 API를 사용하고 싶다

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

6 of 30

>>

왜 CLI 일까?

Part 1

직관적

가벼움

빠름

….

숙달된 사용자면

GUI보다 효율적으로

작업 가능

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

7 of 30

기본 로직

2

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

8 of 30

>>

프로그램 흐름 (유저)

Part 2

기존 계정 OR 새 계정 생성

입력받은 메뉴 실행

코인 조회, 매수, 매도, 포트폴리오 등

로그인 및 회원가입

메뉴 선택

메뉴 실행

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

9 of 30

>>

메뉴(내장기능들)

Part 2

암호화폐 시세 조회

매수

시가총액 순

9개만

시세 변동률, 가격 등

이름으로 매수

개수 지정 가능

매수시 가격 표시

포트폴리오

현재 잔고

구매한 암호화폐 수

코인마다 보유 수량

매도

이름으로 매도

개수 지정 가능

매도시 가격 표시

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

10 of 30

>>

코인 시세 조회

Part 2

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

11 of 30

>>

매수

Part 2

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

12 of 30

>>

매도

Part 2

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

13 of 30

>>

포트폴리오 확인

Part 2

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

14 of 30

사용한 자료구조

3

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

15 of 30

>>

DB 기능 (feat. 동적배열)

Part 3

동적배열 - init

초기 메모리 할당

capacity : 현재 얼마나

더 데이터를 넣을 수

있는지 지정

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

16 of 30

>>

DB 기능 (feat. 동적배열)

Part 3

동적배열 - 푸쉬백

동적배열 맨 뒤에 삽입

현재 저장공간이

부족하면 공간 2배

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

17 of 30

>>

DB 기능 (feat. 동적배열)

Part 3

동적배열 - 팝백

맨 뒤 데이터 삭제

데이터가 없으면 리턴

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

18 of 30

>>

DB 기능 (feat. 동적배열)

Part 3

회원가입

중복 확인

새 유저 객체 생성

동적 배열에 저장

파일에 세이브

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

19 of 30

>>

DB 기능 (feat. 동적배열)

Part 3

로그인

순차적으로

유저 닉네임 일치 확인

입력한 패스워드 해싱

기존 패스워드와 비교

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

20 of 30

>>

포트폴리오 확인 기능

Part 3

포트폴리오 확인

사용자 정보 출력

해시맵을 돌면서

코인 정보 출력

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

21 of 30

>>

매수 기능

Part 3

매수

구매수량 입력

빈 입력인지 확인

api로 코인 가격 요청

구매 확정

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

22 of 30

>>

매도 기능

Part 3

매수 & 매도 api

api GET 요청

응답 확인

JSON으로 파싱

krw 아이템 저장

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

23 of 30

>>

해시맵

Part 3

해시맵?

키 값을 배열의 인덱스로 바꿔서 O(1)의 속도로 탐색할 수 있는 자료구조

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

24 of 30

>>

해시맵

Part 3

해시맵 init

초기 저장 공간 할당

used와 key 세팅

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

25 of 30

>>

해시맵

Part 3

해시맵 해싱

이전까지 계산한

값에 31을 곱하고

새 문자 더하기

음수 보정

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

26 of 30

>>

해시맵

Part 3

해시맵 삽입

key를 해싱한다

해싱함수는 다른 값

넣어도 같은 값이

나올 수 있기에 충돌

검사

테이블을 순환하며

키가 있으면 값만

바꾼다

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

27 of 30

>>

해시맵

Part 3

해시맵 탐색

key를 해싱한다

테이블을 순환하며

키를 비교하여 같은

키의 값을 넘겨준다

보통 O(1) 근사

최악 O(n)

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

28 of 30

4

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

29 of 30

- 코드를 1500줄 짜느라 힘들었다

- API 키를 숨겨서 실행파일에 넣어야 하는데 시간이 없어서 못했다

- .dat 파일 처리와 API 처리 부분이 많이 힘들었다

후기

ⓒSaebyeol Yu. Saebyeol’s PowerPoint

30 of 30

Q&A

ⓒSaebyeol Yu. Saebyeol’s PowerPoint