-
✨ INTRO
랜덤한 난수 생성에 대한 실습에 빠지지 않는 일확천금의 로또 번호 생성.
로또 1등이 당첨된다면...... 😎 정말 좋겠지..만..
아무튼, 모던한 방식도 있고 여러 방법이 있겠지만
내가 생각한 논리로도 구현이 가능한지 한 번 시도를 해보고 싶었고.
의미가 없지는 않았지만 이것이 효율적이라고 판단하기는 어려움.
최소가 6번의 반복이면 끝날 수 있기 때문에, 그 이상의 반복 횟수가 나오기 때문이지만..
또한 답지를 보고 수학 문제를 풀면 그땐 내가 이해가 가더라도, 나중가면 햇갈릴 수 있기도 하고...
무엇보다 내가 생각한 대로 코드를 짜고 풀어보는게 재밌으니까 한 번 가보자잇 😎
나의 코드 흐름 구조
º 로또 이므로 벡터의 크기는 6으로 한다.
º 랜덤한 수를 벡터의 뒤에 넣는다.
º 오름차 순 정렬을 시행하고, unique() 를 이용하여 중복 값을 제거한다.
º 만약 벡터의 크기가 6이 아니라면, 중복 값이 제거되었다고 판단한다.
º 올바르게 반복문이 종료되면 중복 값이 없는 로또 번호가 오름차순으로 정렬된다.
소스코드 리뷰
while (lotto.size() < 6) { //로또의 크기가 6이 될 때까지. int num = rand() % 45 + 1; // 범위를 한정하고 싶다면 나머지 이용하기 lotto.push_back(num); sort(lotto.begin(), lotto.end()); //정렬하고 lotto.erase(unique(lotto.begin(), lotto.end()), lotto.end()); //중복값제거 }
코드를 구상할 땐 논리 정연하고 장왕했으나, 막상 코드로 작성하면 몇 줄 안되서..
그렇다고 해서 코드가 적다고 그것이 안 좋은 코드라고 생각하고 싶지는 않다.
오히려 짧고 이해하기 쉽게 써진 코드가 내가 생각하기엔 좋은 코드 같아서..
(의문) 근데 지금 생각해보면, 정렬하고 중복값 제거하는 과정을 매 번 하는 것보다는
벡터의 사이즈가 5나 6이 되었을 때, 시행하는 것이 좋지 않을까? 🤔
또한 시간 복잡도를 고려해봤을 때, sort를 하는 부분은 시간 복잡도가 대략적으로 O(n log n) 이다.
로또라는 적은 수의 값을 추출하는 과정이기에 많은 복잡도가 걸리지는 않지만...
다른 인터넷에서 찾아볼 수 있는 코드들에서 상수 시간의 복잡도를 요구하는 과정과 비교하면
효율적이라고는 보기 어렵긴 하겠다.
그럼에도 내가 생각했던 코드 흐름이 원하는 결과를 생성해내는 것에 성공했다는 것이
이 삭막한 코드 작성에서의 한 줄기 즐거움이니까. 😊
기존 코드 참고 >
🎉해당 글의 내용은 "포스코 x 코딩온 스마트 팩토리 과정 수업" 에서의 수업 자료 및 실습 과제 등에서 일부 발췌되어 작성 되었습니다.
'개발 > C++' 카테고리의 다른 글
[C++] 쓰레드(thread)의 기본 개념 학습 (1) 2023.10.06 [C++] 프로젝트 기술 회고, 프로젝트를 마치고 복습 (P01~P05) (2) 2023.09.25 [C++] 하나의 긴 소스파일을 여러 파일로 분할하여 관리하기. (0) 2023.09.14 [C++] 오버라이딩 사용하는 이유에 대한 정리 (0) 2023.09.13 [C++] 하나의 파일을 이용하여 다른 한 개의 파일에 추가적인 입력과 수정하기 (0) 2023.09.11 댓글 (비로그인 댓글 허용하지 않습니다.)