분류 전체보기
[210204~210206]SW중심대학 공동해커톤 후기
[210204~210206]SW중심대학 공동해커톤 후기 2021년 2월 4일부터 6일까지 2박 3일간의 해커톤 후기를 남겨보고자 한다. 시작 전 SW중심대학 공동해커톤에 대한 공고를 학교 홈페이지에서 보게 되었다. 알고리즘 대회에만 몇번 참가해보고 해커톤에는 한번도 참여해보지 않았는데 선배들이 한번 나가보는 것도 괜찮다고 했던 말이 생각나 덜컥 접수해버렸다. 몇일 뒤, 선발되었다는 메일이 왔고 걱정이 되기도 했다. 2박 3일 그 짧은 시간안에 서비스를 하나 만들어야 할텐데 내가 잘할 수 있을까라는 걱정이 제일 컸던 것 같다. 팀빌딩 걱정을 안고 OT 이후에 팀빌딩이 시작되었다. 이번에 해커톤은 온라인으로 진행하는 방식이라 그런지 팀빌딩도 미리 진행하였다. OT 이후부터 해커톤 시작일인 2월 4일 전까지 ..
[BaekJoon] 백준 6603번 로또
[BaekJoon] 백준 6603번 문제이름 문제: www.acmicpc.net/problem/6603 내코드 이 문제는 백트래킹으로 풀었다. 주어진 숫자들에서 6개의 숫자를 선택해서 사전순으로 나열하고 출력하면 된다 out 변수에 선택된 6개의 숫자를 차곡차곡 넣어준다. visited 리스트에 해당 순서의 숫자가 선택되었는지, 안되었는지 true, false로 기록해준다. dfs와 비슷한 방식이다. out[0]을 1이라고 선택하면, out[1]을 2로 선택한 경우를 쭉 보고, out[1]을 3으로 선택한 경우를 쭉 확인하는 방식으로 간다. 각각의 경우를 확인하면 pop을 해서 다음 경우를 확인하게 된다. out의 길이가 6이 되면 출력을 해준다. # BaekJoon 6603.py 로또 def solve..
[BaekJoon] 백준 15651번 N과 M(3)
[BaekJoon] 백준 15651번 N과 M(3) 문제: www.acmicpc.net/problem/15651 내코드 이전 문제들과 비슷 단지 오름차순이여야 한다는 조건이 없고, 중복이 가능하기 때문에 해당 코드를 제거해 주면 된다. # BaekJoon 15651.py N과 M(3) # 백트래킹 문제: 주어진 문제의 답을 구하기 위해 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘 n, m = map(int, input().split()) out = [] # 출력 내용 def solve(depth, N, M): if depth == M: # 길이가 m인 리스트가 완성되었다면 print(' '.join(map(str, out))) # 출력 return for i in range(n):..
[BaekJoon] 백준 15650번 N과 M (2)
[BaekJoon] 백준 15650번 N과 M (2) 문제: www.acmicpc.net/problem/15650 내코드 15649번 N과 M (1)과 거의 동일하지만 오름차순으로 출력해야 한다는 것이 달랐다. 즉, (1)번 문제는 (1 2), (2 1)이 다른 배열로 처리되었지만 (2)번 문제에서는 둘중 오름차순인 (1 2)만출력해야 된다는 것 [1, 3]과 같은 리스트가 있을 때, 다음 숫자를 정하는 과정에서 새로운 수가 3보다 작으면 pass하는 방식으로 처리해줬다. # BaekJoon 15649.py N과 M(2) # 백트래킹 문제: 주어진 문제의 답을 구하기 위해 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘 n, m = map(int, input().split()) vis..
[BaekJoon] 백준 15649번 N과 M(1)
[BaekJoon] 백준 15649번 N과 M(1) 문제: www.acmicpc.net/problem/15649 내코드 백트래킹 문제: 주어진 문제의 답을 구하기 위해 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘 백트래킹 문제를 처음 풀어보는 것이기도 했고, 구현 과정이 상당히 어려웠다. 리스트에 값을 하나씩 넣어주면서 풀어주는 문제 만약 1-4의 수가 있고, 2자리 수열을 만들어줘야 한다고 가정해보자. [1, x] -> [1, 2] -> [1, 3] -> [1, 4] -> [2, x] -> [2, 1] -> [2, 3] -> [2, 4] 이런식으로 리스트에 수가 들어갈것 수가 사용될때마다 visited에서 해당 값은 True로 처리 n, m = map(int, input().sp..
[OS] Process 동기화(1)
[OS] Process 동기화(1) Process 동기화란 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것 임계구역(Critical Section) 문제 do { entry section critical section exit section remainder section } while(TRUE); 임계구역은 여러개의 프로세스가 수행되는 시스템에서 각 프로세스들이 공유하는 데이터를 변경하는 코드 영역을 말함 간단하게 말하면, A라는 변수를 2개의 프로세스가 공유한다고 해보자. 각 프로세스가 코드에서 A 값을 변경한다면 해당 코드는 임계구역이다. 임계구역을 해결하기 위해서 만족해야 하는 조건 Mutual exclusion(상호배타): 임계구역에 오직 한 프로세스만 진입 가능 Progress(진행): ..
[BaekJoon] 11729번 하노이 탑 이동 순서
[BaekJoon] 11729번 하노이 탑 이동 순서 문제: www.acmicpc.net/problem/11729 내코드 A,B,C 기둥이 있고, n개의 원판이 있다고 생각하자 A기둥에 n개의 원판이 있을 때 C 기둥으로 옮기려면 n-1개를 B기둥으로 옮기고 나머지 가장 큰 한개를 C로 옮기고 B기둥에 있는 n-1개를 C로 옮기면 된다 이렇게 생각하면 재귀가 적용이 된다. 위의 3과정을 그대로 코드로 옮겨주면 된다. n-1개의 원판을 옮기는 방법, n-2개... 이렇게 반복되는 것 주의) 원판이 한개인 경우는 한번만 옮기면 되므로 따로 처리해준다. def hanoi(n, a, b, c): # 원판이 한개인 경우는 한번만 옮기면 되므로 따로 처리 if n == 1: print(a, c) # a기둥에 n개의..
[OS] 동기와 비동기
[OS] 동기와 비동기 동기는 어떤 일이 끝난 후에 다음일을 하는 것, 비동기는 어떤 일이 끝나지 않더라도 다음 일을 수행할 수 있는 것이다. Blocking & None-Blocking 동기 & 비동기를 살펴보기 전에 blocking & none-blocking 먼저 살펴보자 Blocking I/O 작업은 user level에서 직접 수행할 수 없고 kernel level로 들어가야 한다. 따라서 user level에서 kernel level로system call을 보내서 I/O 작업을 수행한다. 이때 application 단의 스레드에 block이 걸린다. (I/O 작업이 끝나기 전까지 반환되지 않기 때문) 그리고 kernel level에서 해당 I/O 작업이 끝나고 데이터를 반환하면 그때서야 app..