TIL💡/Algorithms(157)
-
[백준] 5373번: 큐빙
https://www.acmicpc.net/problem/5373 5373번: 큐빙 각 테스트 케이스에 대해서 큐브를 모두 돌린 후의 윗 면의 색상을 출력한다. 첫 번째 줄에는 뒷 면과 접하는 칸의 색을 출력하고, 두 번째, 세 번째 줄은 순서대로 출력하면 된다. 흰색은 w, 노란 www.acmicpc.net 무려 이틀에 걸쳐 푼 문제이다. 쌩구현을 해야했는데, 나름 쉽게 풀려면 입체적인 큐브를 상상하면서 규칙을 생성해야 한다. 큐브를 한 번 돌리면 배열에는 크게 2가지 변화가 생긴다. 돌아가는 해당 면의 위치 변경 인접한 면들의 회전 그래서 이를 나누어서 큐브에 반영해준다. 큐브는 정육면체이므로 6개의 배열에 3 by 3 2차원 배열을 넣어 각 방향마다 값들을 옮겨준다. 만약 같은 면을 돌리되 방향만 ..
2022.10.13 -
[백준] 16235번: 나무 재테크
https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 문제의 구현은 생각보다 간단하지만, 시간 초과가 계속 발생해서 문제를 조금 더 효율적으로 풀도록 노력해야 하는 문제이다. 다행히 코드 디자인을 수정하기에 용이하게 해둔 덕분에 수정이 어렵지는 않았다. 여기서 시간이 많이 소요될 수 있는 부분은 다음과 같다. 죽은 나무를 걸러내는 작업 어린 나무부터 정렬하는 작업 문제 질문 게시판을 보면 deque를 쓰는 경우가 많았으나, 나는 이 ..
2022.10.12 -
[백준] 14890번: 경사로
구현의 실력이 일취월장하고 있다. 처음에 문제 읽을 때만해도 이걸 어떻게 구현하나 난감해 했는데, 단 한 번의 제출만에 성공해버렸다.(소오름...) 우선 문제를 최대한 간단하게 만들어서, 유효한 길인지 판단하는 방법을 단순화했다. 1. Line 추출 괜히 이차원으로 접근하는 코드를 만들면 구현하는 내가 힘들다...ㅠ 한 줄로 만들어서 공통으로 적용하는 코드를 만들면 이해하기 쉽고, 직관적이라 수정하기에 쉽다. 2. 유효성 파악 유효하지 않은 패턴을 파악해보니 크게 아래와 같다. 1) 높이 차이가 1보다 큰 경우 2) 경사로를 놓을만한 충분한 공간이 없는 경우 3) 경사로 배치가 중복되는 경우 1, 2번의 경우 비교적 판단하기 쉬우나, 경사로 배치가 중복되는 경우를 처리하기 까다로웠다. 상대적인 높이 비교..
2022.10.11 -
[백준] 19238번: 스타트 택시
https://www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 꼼꼼히 문제를 읽어야 하는 문제이다. 주의할 점이 상당히 많기 때문이다. 우선 주요한 수도 코드를 만들어보면 다음과 같다. 1. 후보 고객 탐색 - 최단 거리에 있어야 한다. → BFS 탐색 - 만약 최단 거리인 고객이 다수라면, 우선순위에 따라 정렬 - 보유 연료만으로 도달 불가능한 고객도 고려 → 바로 -1 리턴 2. 해당 고객을 목적지까지 모시는 데 필..
2022.10.11 -
[백준] 2281번: 데스노트
https://www.acmicpc.net/problem/2281 2281번: 데스노트 첫째 줄에 n(1 ≤ n ≤ 1,000), m(1 ≤ m ≤ 1,000)이 주어진다. m은 노트의 가로 칸의 개수(폭, 너비)이다. 다음 n개의 줄에는 각 사람의 이름의 길이가 노트에 적어야 할 순서대로 주어진다. 각 길이는 m www.acmicpc.net 다이나믹 프로그래밍 문제 접한 지 오래되어서 감 떨어질까봐 접한 문제인데, 눈물 나게 어려웠다.. 처음에는 일일이 해야하나 싶다가 해당 이름을 현재의 줄에 그대로 쓸지, 아니면 새로운 줄에 쓸지 결정하는 게 이 문제 풀이의 핵심까지는 캐치했다. 이 문제는 이전 다이나믹 프로그래밍과 다르게 풀면 쉽게 접근할 수 있다. 이전까지는 주로 앞 내용을 기반으로 앞 내용을 반..
2022.10.11 -
[OS] 병렬 처리 기법 정리(feat. 파이프라인, 슈퍼..슈퍼..)
명령어 처리 방법 컴퓨터에서 실제로 병렬 처리가 어떻게 이루어지는지 살펴보자. CPU 내에서 명령어는 제어 장치가 처리한다. 제어 장치는 명령어를 가져와 해석한 후 실행하고 결과를 저장하는 과정을 계속 반복한다. 이러한 과정 전체를 하나의 스레드라고 하며 스레드를 이루는 각 단계는 CPU의 클록과 연동되어 한 클록에 하나씩 이루어진다. CPU에서 명령어가 실행되는 과정은 다음과 같이 4단계로 나뉘는데 연구자 또는 책에 따라 더 세분하기도 한다. CPU는 이러한 단계를 계속 반복하면서 명령어를 처리한다. 1. 명령어 패치(Instruction Fetch, IF): 다음에 실행할 명령어를 명령어 레지스터에 저장한다. 2. 명령어 해석(Instruction Decode, ID): 명령어를 해석한다. 3. 실행..
2022.10.10