전체 글 127

[프로그래머스] 외벽 점검

2020 카카오 블라인드 채용 코딩 테스트 문제입니다. 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하 programmers.co.kr 문제 확인 2가지 풀이법이 있습니다. 비트로 수리한 외벽을 체크하고 완전 탐색 퍼뮤테이션을 통해 완전 탐색 풀이 1번 풀이의 경우 큐를 통해 bfs 완전 탐색을 하며 최대 15개의 점검해야 할 외벽이 있기 때문에 각 외벽을 2^i 비트로 표현합니다. 010100의 의미는 점검해야 할 외벽 6개 중에서 i : 2, 4에 해당하는 외벽을 점검 완료하였다는 의미를 가집니다. 현재 위치의 벽을 dist[i]로 설정..

[백준] 9370 미확인 도착지

9370번: 미확인 도착지 (취익)B100 요원, 요란한 옷차림을 한 서커스 예술가 한 쌍이 한 도시의 거리들을 이동하고 있다. 너의 임무는 그들이 어디로 가고 있는지 알아내는 것이다. 우리가 알아낸 것은 그들이 s지점에서 www.acmicpc.net 문제 확인 다익스트라 알고리즘을 활용하는 문제입니다. 풀이 방법은 2가지가 있으며 두 방법 모두 비슷한 결과로 나옵니다. 1번의 다익스트라 알고리즘을 수행하면서 g-h 간선을 지나는 경우를 체크하는 방법 start-g + g-h + h-dest 혹은 start-h + h-g + g-dest 가 start-dest와 값이 같은지 확인하는 방법, 3번의 다익스트라 알고리즘을 수행 결과가 비슷한 이유는 기존 다익스트라 알고리즘 계산 시 dist, graph 배열..

[백준] 9660 돌 게임 6

www.acmicpc.net/problem/9660 9660번: 돌 게임 6 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000) www.acmicpc.net 문제 확인 게임트리 문제입니다. 풀이 가지고 갈 수 있는 돌의 개수는 1, 3, 4개 이므로 현재 플레이어가 이길 수 있는 경우의 수는 현재 남은 돌에서 x 개를 가져가서 1, 3, 4를 만들 수 없는 수의 돌을 남기는 것입니다. 따라서 2, 7, 9, 14 .. 가 되며 이는 7로 나눈 나머지가 2, 0 인 경우입니다. 코드 1 2 3 4 5 6 7 8 9 10 #include int main() { long long n; scanf("%lld", &n); if (n % 7 == 0 || n % 7 == 2) printf(..

[백준] 2493 탑

2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제 확인 배열 인덱스를 따라가면서 만족하는 인덱스를 찾는 방식으로 풀 수 있습니다. 스택을 활용하여 문제를 풀어도 비슷한 결과가 나옵니다. 풀이 2가지 경우로 나눕니다. 전에 입력받은 탑의 크기가 현재 탑 보다 큰 경우 : 현재 탑이 발사한 레이저 신호를 수신한 탑은 i - 1이 됩니다. 현재 탑이 작은 경우 : i - 1부터 수신 가능한 탑을 찾아 내려갑니다. i - 1 번째 탑이 발사한 레이저 신호를 어느 탑이 수신하였는가(dist[i-1])를 보고 수신..

[운영체제] 좀비 프로세스, 고아 프로세스

좀비 프로세스 자식 프로세스가 부모 프로세스보다 먼저 죽는 경우 부모 프로세스가 종료 상태를 회수하기 위해 커널이 자식 프로세스의 최소한의 정보(PID, 종료 상태 등, 리눅스의 경우 커널에서 사용하는 구조체)를 남겨둡니다. 부모 프로세스는 wait 함수를 호출하여 이 상태를 회수하면 남은 모든 정보가 제거되어 자식 프로세스는 완전히 소멸하게 됩니다. 위와 같은 진행상황에서 부모 프로세스가 wait 함수를 호출하지 않아 최소한의 정보가 메모리에 남아 있는 경우를 좀비 프로세스라고 합니다. 좀비 프로세스는 최소한의 정보만을 가지고 있어 큰 성능 저하를 야기하지 않지만, 운영체제는 한정된 PID를 가지고 있으므로 좀비 프로세스가 PID를 차지하며 다른 프로세스 실행을 방해하게 됩니다. 따라서 부모 프로세스는..

[운영체제] 프로세스 생성과 소멸

Process Creation 프로세스 생성은 부모 프로세스가 연산을 통해 자식 프로세스를 만들어냅니다. 생성된 자식 프로세스 또한 새로운 자식 프로세스를 만들 수 있으며 이를 구별하기 위해 모든 프로세스는 각자 고유의 PID를 가지게 됩니다. 이렇게 생성된 프로세스 간의 관계는 하나의 큰 트리구조가 됩니다. init 프로세스 : 리눅스, 유닉스 계열의 OS에서 최초로 실행되는 데몬 프로세스이며 PID는 항상 1입니다. 생성된 자식 프로세스는 각자 고유의 PID, 메모리, CPU 등 새 PCB가 할당되며 고유의 자원을 획득하게 됩니다. 이로 인하여 부모 프로세스의 자원 접근에 제한이 생기며 특수한 방법을 통해 공유할 수 있게 됩니다. 프로세스를 생성한 후 부모 프로세스는 다음과 같이 2가지 행동을 할 수..

[프로그래머스] 기둥과 보 설치

2020 카카오 블라인드 채용 코딩 테스트 문제입니다. 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[ programmers.co.kr 문제 확인 단순 구현 문제입니다. 풀이 기둥, 보가 설치된 것을 확인하기 위해 ary[101][101][2] 로 선언합니다. 각 ..

[프로그래머스] 자물쇠와 열쇠

2020 카카오 블라인드 채용 코딩 테스트 문제입니다. 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 문제 확인 구현, 완전 탐색 문제입니다. 풀이 초기 자물쇠 lock의 홈의 개수를 저장해 둡니다. 매번 확인 시 배열을 회전하지 말고 처음에 key 배열을 회전하여 따로 저장합니다. 이를 통해 메모리 검색 시간과 회전 비용을 줄일 수 있습니다. 완전 탐색 범위는 초기 위치 (i, j) : 1 - key.size() ~ n, 배열 조건 검사 위치 (ki, kj) : 0 ~ m까지 탐색하게 됩니다. 이로 인하여 비교할 값은 lock[i + ki][j + kj]..

[운영체제] 비전섬 스케줄링 vs 선점 스케줄링

비선점 스케줄링 할당된 프로세스를 CPU에서 강제로 내보낼 수 없으며 프로세스가 작업을 완료하거나 입출력 이벤트 등 인터럽트 발생 시에만 CPU를 반환하여 다른 프로세스가 사용할 수 있게 됩니다. 우선순위에 따라 ready queue 내에 프로세스의 위치가 달라질 수 있습니다. 장점 : 복잡한 알고리즘이 필요 없으며 context switch발생이 매우 적으므로 응답 시간이 적습니다. 단점 : 공정성이 없으며 대기시간이 높습니다. 또한 우선순위에 의해 무한정 대기가 발생할 수 있으며 시스템에 중요한 작업을 빠르게 해결하지 못할 수 있습니다. 알고리즘에 따라 인터럽트가 발생하더라도 CPU를 반환하지 않는 경우도 있으며 사용 효율이 줄어듭니다. 단순 반복 작업에 유리하여 일괄 처리 방식에 적합합니다. 선점 ..

[프로그래머스] 괄호 변환

2020 카카오 블라인드 채용 코딩 테스트 문제입니다. 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 문제 확인 문제에서 주어진 대로 구현하면 되는 문제입니다. 풀이 올바른 문자열 인지 판단하는 방법은 문자열을 검색하면서 ( : +1, ) : -1을 해 주면서 값이 항상 양수라면 올바른 문자열, 한 번이라도 음수 값이 된다면 올바르지 못한 문자열이 됩니다. 괄호 문자 (, ) 은 아스키 값으로 72, 73이며 붙어있는 수 이므로 xor 1을 통해 간단하게 서로 바꿀 수 있습니다. 코드 1 2 3 4 5 6 7..