전체 글 147

[BOJ] 1083번 소트

복기버블정렬은 내부 반복문이 끝날 때마다 자리 하나가 고정이 된다. 코드C++ 17 #include #define min(a, b) (a > N; for (size_t i = 0; i > Arr[i]; cin >> S; // 본 문제는 버블정렬을 이용하는 것이다. // 반복이 끝나는 것은 정렬이 다 되었거나, // 교환을 더 이상 할 수 없을 때다. for (size_t i = 0; i < N; i++) { // 교환을 더 할 수 없으면 반복을 종료한다. if (S == 0) break; // 현재 값을 최댓값으로 설정한다. int max = Arr[i], maxIdx = i; // 교환할 수 있는 횟수는 아래와 같다. size_t count = min(N, i + 1 + S)..

[BOJ] 1431번 시리얼 번호

복기복잡한 정렬에서는 나중 조건부터 차례대로 정렬해나가면 깔끔한 코드를 작성할 수 있다. 그리고 항상 모듈을 올바르게 구현했는지 확인하자. 코드C++ 17 #include #include #include using namespace std; int N;string Serials[1000]; int Cal(const string& str){ int result = 0; for (char ch : str) { if (isdigit(ch)) result += ch - '0'; } return result;} int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N; for (size_t i = 0; i < N; ..

[BOJ] 3101번 토끼의 이동

복기타입에 주의하자... 코드C++ 17 #include using namespace std; long long Sigma(int N){ return 1LL * N * (N + 1LL) / 2LL;} int main(){ int N, K, R = 0, C = 0; scanf("%d %d\n", &N, &K); long long result = 1; for (int i = 0; i < K; i++) { switch (getchar()) { case 'U': --R; break; case 'D': ++R; break; case 'L': --C; break; default: ++C; } // 좌표를 이용해서 값을 얻어낼 수 있다. long long first, dist; if (R + C < N) { // 각..

[BOJ] 4948번 베르트랑 공준

복기에라토스테네스의 체는 boolean 배열을 이용하여 구한다. 코드C++ 17 #include #define LENGTH 1024 * 256 using namespace std; int N;bool Primes[LENGTH] = { false };int CountOfPrimes[LENGTH] = { 0 }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); // 에라토스테네스의 체로 소수를 구한다. Primes[0] = Primes[1] = true; for (size_t i = 2; i < LENGTH; i++) { if (Primes[i]) continue; for (size_t j = i * 2; j < LE..

[Design Pattern] 브릿지 패턴(bridge pattern)

목차브릿지 패턴Pimpl 관용구정리하며참고자료 1. 브릿지 패턴개요브릿지 패턴(bridge pattern)은 구현부에서 추상층을 분리해 각자 독립적으로 변형과 확장이 가능하도록 하는 패턴이다. 브릿지 패턴을 적용하면 두 계층 모두 추상화된 상위 타입을 가지게 되고, 의존성은 상위 타입 간에만 이뤄지게 된다. 이를 통해 실제 의존성이 발생하더라도 서로의 구체 타입은 알 수 없도록 한다. 이렇게 되면 두 계층의 결합도가 약화되어, 양쪽 모두가 독립적으로 변경과 확장이 가능한 상태가 된다. 따라서 컴포넌트 간 다양한 조합이 가능할 때 효과적이다. 구조구조는 다음과 같다. 실제 구현은 모두 인터페이스에 위임(delegation)하는 형태가 된다. 2. Pimpl 관례Pointer to Implementation..

Outdated/Column 2020.04.11

[Design Pattern] 팩토리 패턴(factory pattern)

목차생성자 다시보기팩토리정리하며참고자료 1. 생성자 다시보기생성자의 첫 번째 단점생성자에게는 두 가지 단점이 있다. 첫 번째는 메소드 이름이 항상 타입과 같은 이름을 가져 이름에 추가적인 정보를 표시할 수가 없다는 것이다. 다음의 예시를 보자. 좌표점을 나타내기 위해 Point 클래스를 설계하였고, 직교 좌표계와 극 좌표계를 모두 지원하려고 한다. class Point{ float x, y; float distance, radian; public: // 직교 좌표계를 위한 생성자 Point(float x, float y) : x{ x }, y{ y } { // ... } // 극 좌표계를 위한 생성자 Point(float distance, float radian) : distance{ distance }..

Outdated/Column 2020.03.24

[BOJ] 1024번 수열의 합

복기가우스 수열...정말.. 코드C++ 17 #include using namespace std; int N, L; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N >> L; // 이 문제는 가우스 수열을 이용해야 한다. // N을 L개의 수열로 구성한다고 할 때, // 1. L이 홀수라면 // 중간 값을 K라고 할 때, 수열은 다음과 같은 형식이 된다. // K - A, K - A + 1, ... , K , ... , K + A - 1, K + A (A = (L - 1) / 2) // 위의 수열을 역순으로 배치한 수열과 더해주면 2KL = 2N 즉, KL = N이 된다. // 2. L이 짝수라면 ..