전체 글 153

[BOJ] 1437번 수 분해

복기처음엔 메모이제이션을 생각했는데, 수학 문제는 해당 수의 규칙성을 잘 발견해야겠다. 코드C++ 17 #include #define M 10007 using uint = unsigned; int main(){ uint n = 0; scanf("%u", &n); // N이 5 미만이라면 분해를 하지 않고 그대로 곱하는 것이 이득이고 // N이 5 이상이라면 3을 가능한 많이 곱하는 것이 이득이다. uint k = 1; while (n >= 5) { k *= 3; k %= M; n -= 3; } printf("%u", (n * k) % M);} C# 6.0 using System;using System.Diagnostics.CodeAnalysis; namespace Csharp{ class Program ..

[BOJ] 1937번 욕심쟁이 판다

복기- 코드C++ 17 #include #define Max(lhs, rhs) ((lhs) > (rhs) ? (lhs) : (rhs)) int N;int Map[502][502];int Memo[502][502]; // 각 좌표마다 며칠동안 생존 가능한지 메모이제이션한다. int Search(int r, int c){ if (Memo[r][c]) return Memo[r][c]; // 상 if (Map[r - 1][c] > Map[r][c]) Memo[r][c] = Max(Memo[r][c], Search(r - 1, c) + 1); // 하 if (Map[r + 1][c] > Map[r][c]) Memo[r][c] = Max(Memo[r][c], Search(r + 1, c) + 1); // 좌 if ..

[OS] 프로세스(process)와 스레드(thread)

목차프로그램프로세스스레드멀티 프로세스 vs 멀티 스레드참고자료1. 프로그램먼저 프로세스를 살펴보기 전에 프로그램(program)이 무엇인지 알아볼 필요가 있다. 본래 프로그램의 의미는 업무를 어떻게 수행할 건지에 관한 표였다. 다시 말해 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 것이다. 컴퓨터에서의 프로그램의 의미도 비슷한데, 프로그램은 어떤 작업을 하기 위한 명령어 목록과 그에 필요한 데이터를 묶어 놓은 파일이며, 보조 기억장치에 저장되어 있다.2. 프로세스정의프로세스(process)의 정의는 다양한데 본질적으로는 위에서 설명한 프로그램이 실제로 메모리에 적재 되어(loaded) 실행되고 있는 인스턴스(instance)를 말한다. 다르게 얘기하면 운영체제로부터 시스템 자원을 할당 받는 작업..

Outdated/OS 2020.05.06

[BOJ] 1799번 비숍

복기체스판 문제는 흑과 백으로 나눠서 생각하도록 하자. 또, 말들의 범위를 검사할 때 메모리를 이용하는 방법도 고려해보자. 코드C++ 17 #define _CRT_SECURE_NO_WARNINGS #include #define max(a, b) ((a) > (b) ? (a) : (b)) int N;int Chess[10][10];int Ans[2]; // 아래 변수는 비숍의 범위가 겹치는지 나타내는 변수다.// 이 값이 1이면 다른 비숍과 범위가 겹쳐 거기에 위치시킬 수 없다.int Left[21]; // 좌하단 방향의 대각선int Right[21]; // 우하단 방향의 대각선 // 흑과 백을 구분하기 위한 변수int Criterion; void dfs(int r, int c, int cnt){ // 비..

[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; ..