일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- c++
- 백준
- 알고리즘
- 자료구조
- 스택
- 정석
- 그래프
- DP
- 문제풀이
- 컴공
- 컴공과
- 컴퓨터공학과
- Computer science
- 북리뷰
- Operating System
- 코테
- coding
- vector
- 정석학술정보관
- 코딩
- 브루트포스
- 구현
- Stack
- 너비우선탐색
- 오에스
- 오퍼레이팅시스템
- OS
- 개발
- cs
- bfs
- Today
- Total
목록coding (150)
Little Jay
while문의 조건을 짜는게 많이 까다로웠던 문제 #include #define endl '\n' using namespace std; int N; priority_queue min_heap; priority_queue max_heap; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N; while(N--) { int score; cin >> score; if (min_heap.empty() || max_heap.empty()) { max_heap.push(score); } else { if (score = min_heap.top()) min_heap.push(score); else max_heap.push(score)..
BFS 구현으로 풀 수 있는 문제 #include #define endl '\n' using namespace std; int dist[1000001]; bool check[1000001]; int q[1000000]; int f, s, g, u, d; /* * bfs 조건 분기는 0 f >> s >> g >> u >> d; int begin = 0; int end = 0; q[end++] = s; dist[s] = 0; check[s] = true; while (begin < end) { int now = q[begin++]; if (now + u = 1 && check[now - d] == false) { q[end++] = now - d; dist[now - d] = dist[n..

구조체(Sturcture) 구조체는 간단하게 말해서 기본 데이터 타입들을 가지고 새롭게 사용자가 정의할 수 있는 타입이다. 기본타입뿐만 아니라 복잡한 타입들을 묶어 구조체로 선언할 수 있다. 조금 더 자세히 설명을 하자면, 구조체는 객체를 그룹화하는 데이터 형식을 생성할 수 있다. 서로 다른 유형을 단일 객체로 그룹화 시킨다. 구조체의 다른 구성요소는 이름으로 참조될 수 있는 것이다. 구조체의 구현은 구조체의 모든 구성 요소가 메모리의 연속적인 영역에 저장되고, 구조체에 대한 포인터가 첫 번째 바이트의 주소라는 점에서 배열의 구현과 유사하다고 할 수 있다. 컴파일러는 각 필드의 바이트 오프셋을 나타내는 각 구조 유형에 대한 정보를 관리하게 되는데, 이러한 오프셋을 참조 명령어의 변위로 사용하여 구조 요소..
객체 지향의 원칙들 단일 책임 원칙 (Single Responsibility Principle) 개방 폐쇄 원칙 (Open-closed Principle) 리스코프 치환 원칙 (Liskov Substitution Principle) 인터페이스 분리 원칙 (Interface Segregation Principle) 의존 관계 역전 원칙 (Dependency Inversion Principle) Single Responsibility Principle 모든 클래스는 단 한가지의 책임만을 갖고 클래스 안에 정의되어 있는 모든 기능은 이 하나의 책임을 수행하는데에 집중되어야 한다 즉,하나의 클래스로 너무 많은 일을 하지 말고 한 가지의 책임만 수행하라는 뜻이다. Open/Closed Principle 클래스는 ..

배열을 경험해보지 못한 개발자는 없을 것이다. 배열은 컴퓨터 내에서 연속적인 메모리 공간을 사용할 수 있는 좋은 자료구조이다. T arr[n] 이라는 배열이 있으면, 이는 T라는 자료형에 n길이 만큼 data가 있다는 소리이다. 이때 이 size는 n * sizeof(T) 만큼의 메모리 공간에 연속적으로(Continously) 존재하게 된다. 그리고 arr이라는 이름은 배열의 시작을 가르키는 포인터처럼 사용할 수 있다. char buf[256]; 이라고 선언 후, char *p = buf; 라는 포인터변수를 선언하면 단순히 이 포인터를 가지고서 배열을 다룰 수 있는 것이다. 보통 리눅스 계열에서 포인터는 일반적으로 8byte를 가리키며, n length의 포인터 배열을 선언하게 되면 n * 8의 사이즈의..
wordle이라는 게임이 있는데 살짝 행맨 같은 게임이다. 다시 생각해보니 행맨 보다는 단어로 하는 야구게임이 오히려 더 어울리는 것 같다. https://www.nytimes.com/games/wordle/index.html 위의 사이트에서 해볼 수 있다. css를 먹이면 조금 따라할 수 있을 것 같은데 일단 이정도만 구현하는 거로 해봐도 괜찮은 것 같다. 너무나 간단하기 때문에 live를 사용하였고, 배포도 안할 예정이다. 제출

앞에서 정수가 어떻게 저장이 되는지 확인했으니, 이제 실제 메모리로 들어가 볼 차례이다. Bytes Representation 12345라는 숫자가 있으면 이는 hex로 3039, binary로 0011 0000 0011 1001로 들어갈 것이다. 아래의 코딩 결과처럼 little endian형식으로 들어간 것을 볼 수 있다. Expansion(aka Casting) 일반적으로 casting을 할때 자주 표현되는 warning들이 있다. warning C4305: '초기화 중': 'double'에서 'float'(으)로 잘립니다. 이런 종류의 C4305에러가 발생을 하는데, 이는 형변환에서 데이터가 잘리기 때문에 발생한다. 이런 종류의 에러는 크기가 작은 데이터에서 큰 데이터로 옮겨갈 때 문제가 되지 않..
이 문제를 처음 봤을때는 Brute Force로 하나하나 열 다 체크해가면서 Back Tracking으로 다시 돌아가고 해야하나 생각했지만 2차원 리스트를 생성하고 0으로 초기화해 성을 나타내고, 행들 중에서 경비원이 없는 행의 개수를 센다. 열들 중에서 경비원이 없는 열의 개수를 센다. 두 값 중에 큰 값이 정답이 된다. #include using namespace std; char castle[51][51]; bool row[51]; bool col[51]; int n, m; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i > castle[i..
map을 사용해서 간단히 풀 수 있는 문제 #include #define endl '\n' using namespace std; map d = { {"black", 0}, {"brown", 1}, {"red", 2}, {"orange", 3}, {"yellow", 4}, {"green", 5}, {"blue", 6}, {"violet", 7}, {"grey", 8}, {"white", 9}, }; string s1, s2, s3; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> s1 >> s2 >> s3; long long ans = d[s1] * 10 + d[s2]; for (int i = 0; i < d[s3]; i+..

앞서 설명을 진행하기 위해 우선적으로 2의 보수 체계를 이해할 필요가 있다. 컴퓨터는 이진수로 모든 데이터를 저장한다. 그러면 0과 음수를 어떻게 저장해야 할까? 일반적으로 생각했을 때 Sign Magnitude Representation(부호 절대값) 방식이 있다. 이는 맨 앞의 이진수를 부호로서 사용하는 것이다. 예를 들어 0000 = 0 0001 = 1 0010 = 2 1000 = 0 1001 = -1 1010 = -2 이런식으로 말이다. 이를 도식화 하면 아래와 같이 쓸 수 있다. 이 방식이 좋은 점: 표현 하기에 너무나 간편하다 직관적으로 10진수로 변환하기 쉽다 그러나 이 방식도 문제가 있는데, 0을 표현할때 0000, 1000 이렇게 두 가지의 표현이 나오게 된다. 연산이 복잡해진다. 예를들..