일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Galera Cluster
- Heap
- JPA
- design pattern
- Algorithm
- 파이썬
- Java
- react
- 알고리즘
- OS
- 자료구조
- Kafka
- MSA
- c언어
- 네트워크
- 자바
- spring webflux
- IT
- 운영체제
- 백준
- Proxy
- 컴퓨터구조
- 디자인 패턴
- MySQL
- Spring
- redis
- C
- Data Structure
- JavaScript
- mongoDB
- Today
- Total
목록분류 전체보기 (214)
시냅스
restrict 포인터 메모리 접근에 관한 최적화 기능. Alias rule (메모리 상 같은 위치를 다른 변수로 나타낼 수 있는 규칙)에 부합하지 않는 명확한 상황이라고 판단되었을 때 메모리 위치를 확인하는 과정을 생략한다. 즉, restrict 키워드가 쓰여졌다면 각 변수가 같은 메모리 공간이 아니라는 것을 컴파일러에게 알려주는 것. restrict 키워드를 쓰기 이전 void increase(int *a, int *b, int *x) { *a += *x; // x를 역참조하여 가져온 값만큼 *a를 역참조하여 값을 증가시킴 *b += *x; // x를 역참조하여 가져온 값만큼 *b를 역참조하여 값을 증가시킴 } 아래와 같이 어셈블리어로 확인할 수 있다. restrict 키워드는 c99 표준으로 -st..
Makefile에 앞서... 컴파일 단계 1. Preprocessor (전처리 단계) 전처리기가 전처리기 지시자(헤더, 매크로)를 처리한다. 소스코드를 담고있는 c파일로부터 i를 생성한다. .c -> .i 2. Compiler (컴파일 단계) 전처리된 파일에서 .i -> .s를 생성한다. .s 파일은 어셈블리어 코드로 이루어져 있다. 3. Assembler (어셈블 단계) .s -> 기계어로 이루어진 .o 생성 4. Linking (링킹 단계) .o (object) 파일은 라이브러리 함수가 없기 떄문에 라이브러리와 .o 파일을 링킹하여 .exe 파일을 생성한다. Makefile Makefile을 통해 컴파일 단계들을 대량으로 제어하거나, 처리하기 쉽게 할 수 있다. 중요한 키워드는 Incremental ..
사실은 피신 도중에, 그날에 대한 회고록을 작성하고 싶었다. 피신 과정을 통해 하루하루 스스로 성장하고 있다고 느꼈고, 그러한 성장통을 함께 나눈 동료들에 감사함을 전하고 싶었다. 그러나, 썼다가 떨어지면 쪽팔리니까 쓰지 않았다... 42서울에 대한 좋은 이야기들을 주저리 주저리 늘어 놓고는 떨어진다면, 베스킨라빈스에서 맛보기 스푼만 31번 떠먹은 사람 처럼 보일까봐 확정일 까지 기다렸다. 그리고 피신에 대한 후기를 이제서야 남길 수 있게 됐다! 이 글은 비전공자인 필자의 주관이고, 라 피신에 대한 회고록이다. 비전공자로 공부를 시작한지 약 1년이 지났다. Java, JavaScript(React, Vue, Express), TypeScript, Python 을 배우며 프로그래밍을 탐색하는 기간을 가졌다..
https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 백트래킹을 이용하여 풀었다. 부등호들은 brackets라는 배열로 관리하였고, dfs로 체크하는 동안 check_up이라는 함수를 통해 부등호가 만족하는지 확인하였고, 만족하는 것들은 배열에 담아두었다가 dfs가 끝나면 맨 처음 것과, 마지막 것을 출력해주었다. code n = int(input()) brackets = list(input().split()) visited = [0] * 10 ans = [] ..
https://www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 브루트포스와 백트래킹을 활용하여 풀었다. 가능한 조합을 모두 뽑아줘야 했지만, 시간제약의 관계로 dfs를 돌릴 때 for문을 쓰지 않는 방법으로 접근하였다. 조합을 뽑아 냈으면 start와 link로 나눠 차이를 구하고, 최소값을 갱신해줬다. code n = int(input()) stats = [list(map(int, input().split()))..
https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 다이나믹 프로그래밍을 통해 해결하였다. 다만, 문제를 풀면서 고려해야할 조건이 2가지인데, 최대값과 일자를 고려하여야 했다. 주어지는 일자를 넘어가면 안 되는데, 이를 위해 for문을 역순으로 돌렸다. 값을 구할 때에 뒤에서부터 더해질 수 있는 최대값을 구해나가고, 일자를 벗어난다면 전의 결과를 저장함으로써 0번째 인덱스에 최대값을 도출할 수 있게 했다. code total = int(input()) days =[] cost = [] dp = [] for i in range(total): n, m = map(int, input().s..
https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 백트래킹을 이용한 문제였다. 주어지는 6개의 문자 중에 4개를 뽑아 조합해야 하는데, 문자 4개 중 최소 2개는 자음, 1개는 모음이 되어야 한다. 백트래킹을 통해 모든 가능성을 체크하면서, 모음을 포함하는지에 대한 여부와 자음을 2개 이상 포함하는지에 대한 여부를 함수로 판단하였고, 위 조건에 만족되는 경우에만 출력 할 수 있게 해주었다. code vowel = ['a', 'e', 'i', 'o', ..
https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 백트래킹을 이용하는 기본 문제였다. 다만, 중복에 관한 제약조건들이 있었는데 자기 자신을 출력하면 안되고, 이미 출력한 조합은 다시 출력해서는 안 된다. 자기 자신에 대한 여부는 visited 라는 배열로 관리하였고, 이미 출력한 것에 대한 여부는 printed 라는 배열을 통해 출력한 것들을 저장하여 비교해주었다. code n, m = map(int,input().split()) input_l..
https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 이어서 쓰인 수의 length 값을 구하는 문제였다. 물론, 시간초과를 한 번 맛본 후 반복문을 쓰지 말아야겠다 하고 생각했던 풀이법은 한자리 수인, 1 ~ 9 의 총 합은 9 두자리 수 까지인, 1 ~ 99 의 총 합은 189 세자리 수 까지인, 1 ~ 999 의 총 합은 2889 로 규칙성을 찾아 내었다. 이후에는 각 자리수의 총합에서 입력받은 수 까지의 차이를 빼 결과값을 나타내었다. code n = input() every_nineth = str(len(n) - 1) + ('8' * (len(n) - 1)) ..
https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 각 숫자에 대해 1, 2, 3 으로 이뤄진 경우의 수를 모두 찾는 문제였다. 만약 n > 3 이라면, 수식은 f(n) = f(n - 3) + f(n - 2) + f(n - 1) 로 세울 수 있다. dynamic programming 을 통해 문제에서 제시한 10 이하까지 결과값을 미리 구해둔 뒤, 입력받아 출력해주었다. code dp = [1, 2, 4] for i in range(3, 10): dp.append(dp[i - 3] + dp[i - 2] + dp[i - 1]) t = int(inp..