TIL

[241227 TIL] C++ 공부_자료형의 오버플로우

yoosorang 2024. 12. 27. 20:39
❗ New Knowledge

▪ 자료형의 오버플로우

▪ 좋은 설계 : 최대한 클래스의 변경이 없도록 함
응집도 : 클래스 내 모듈들이 관련된 정도
결합도 : 각 모듈들이 서로 얼마나 의존하는지

▪ SOLID 원칙 : 객체 지향 설계 시 주요 원칙 5가지
단일 책임 원칙(SRP) : 클래스는 하나의 책임을 가진다.
개방 폐쇄 원칙(OCP) : 확장에는 열려 있고 수정에는 닫혀있어야 한다.
리스코프 치환원칙(LSP) : 자식 클래스는 부모 클래스에서 기대되는 행동 보장
인터페이스 분리 원칙(ISP) : 각 클래스에 불필요한 메서드를 구현하지 말자.
의존 역전 원칙(DIP) : 인터페이스는 인터페이스를 구현하는 클래스에 의존적이지 않고 둘다 추상화에 의존하자.

▪ 디자인 패턴 : 반복적인 문제를 해결하기 위한 일반화된 솔루션
생성 패턴_싱글톤 패턴
구조 패턴_데코레이터 패턴
행동 패턴_ 옵저버 패턴

▪ RandRange(Min, Max) : 지정된 범위 안의 값 반환
Rand() : 0부터 RAND_MAX 사이의 정수 반환

1️⃣ 알고리즘 코드카타

🔹콜라츠 추측

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(int num) {
    long long editNum = num; //int형으로 하면 count 488 뜸
    int count = 0;
    while (!(editNum == 1)){
        if(editNum % 2 == 0)
        {
            editNum = editNum / 2;
        }
        else{
            editNum = editNum * 3 + 1;
        }
        count++;
        cout << editNum<<endl;
        if(count >= 500) return -1;
    }
    return count;
}
💭자아성찰
출력해서 문제를 파악하는 것에 익숙해질 필요가 있을 듯

문제 : 테스트 케이스가 626331로 주어졌을 때 반복 횟수가 500번을 넘겨 -1을 반환해야 하는데 488번만 반복됨
해결과정 : 질문하기에서 자료형의 범위에 대한 힌트를 얻음 
해결 : editNum을 long long 타입으로 변경

 

2️⃣ 추가 공부

🔹자료형의 오버플로우

 

자료형의 오버플로우

값이 자료형의 최대값을 초과하면 최소값으로 순환됨1. int크기: 4바이트 (32비트)부호 있는 int (default): -2,147,483,648 ~ 2,147,483,647부호 없는 unsigned int: 0 ~ 4,294,967,2952. long long크기: 8바이트 (64비트)부

yoosorang.tistory.com

🔹정적 바인딩 vs 동적 바인딩

 

정적 바인딩 vs 동적 바인딩

✔정적 바인딩프로그램 컴파일 시점에 함수 호출이 결정되는 바인딩으로 일반 함수에 해당(non-virtual)빠르고 메모리 사용이 적음 ✔동적 바인딩프로그램 실행 시점에 함수 호출이 결정되는 바

yoosorang.tistory.com

🔹const

 

const

1. 변수에 사용값을 변경할 수 없게 함const int value = 10;value = 20; // 컴파일 에러: value는 const이므로 변경 불가 2. 포인터와 함께 사용🔹포인터가 가리키는 값이 상수일 때 : const int*const int value = 10;

yoosorang.tistory.com

 

🔹매개변수 전달 시 *와 &

 

매개변수 전달 시 *와 &

(1) 포인터를 사용하는 경우1) 값이 없는 상태를 나타낼 필요가 있는 경우2) 함수가 가변적인 대상을 가리켜야 하는 경우3) 동적 메모리 사용 시 (2) 참조를 사용하는 경우1) 값이 항상 존재해야 하

yoosorang.tistory.com