728x90

전체 글 374

[컴퓨터공학] 컴퓨터구조, 운영체제 등

학부과정에서 배운 내용들을 이곳에다가 쓸 것입니다. 제가 복습하기 위해서 그리고 제가 쓴 글이 다른 사람들에게 도움이 되었으면 해서 앞으로 꾸준히 써 내려갈 것입니다. 하지만, 저는 아직 학부생이고 복습 차원에서 쓰는 거라서, 그리고 석사, 박사, 교수님 등 전문가가 아니기 때문에 이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그 부분에 대해서는 알려주시면 정말 감사하겠습니다.

컴퓨터공학 2022.06.17

[백준/BOJ] platinum4 - 17106번 빙고 (Text)

▶17106 - 빙고 ▶문제 최근에 구더기 컵 공식 트위터 계정은 구더기 컵 빙고를 공개했다. 원본 트윗은 이 링크에서 볼 수 있다. 마침 이번 대회의 첫 문제이므로 간단한 몸 풀기를 해 보자. 빙고판을 하나 주면 답안을 작성해서 제출하기만 하면 되는 간단한 문제다. 위에 있는 빙고판 말고 새로운 빙고판을 줄 예정이다. 시작하기 전에, 몇 가지 내용을 덧붙이고자 한다. 문제를 이해하기 쉽게 하기 위해 각 칸에 번호를 붙여 놓았다. 열 번호는 왼쪽에서 오른쪽으로 A, B, C, D, E이고, 행 번호는 위에서 아래로 1, 2, 3, 4, 5이다. 칸의 번호는 열 번호와 행 번호를 이어 붙여서 만들어진다. 예를 들어 위 빙고판의 "Is it rated?"가 적힌 칸의 번호는 C5이다. 빙고를 하려면 각 칸에..

BOJ Code/Platinum 2022.06.16

[백준/BOJ] platinum4 - 1854번 K번째 최단경로 찾기 (Python)

▶1854 - K번째 최단경로 찾기 ▶문제 봄 캠프를 마친 김진영 조교는 여러 도시를 돌며 여행을 다닐 계획이다. 그런데 김 조교는, '느림의 미학'을 중요시하는 사람이라 항상 최단경로로만 이동하는 것은 별로 좋아하지 않는다. 하지만 너무 시간이 오래 걸리는 경로도 그리 매력적인 것만은 아니어서, 적당한 타협안인 'k번째 최단경로'를 구하길 원한다. 그를 돕기 위한 프로그램을 작성해 보자. ▶입력 첫째 줄에 n, m, k가 주어진다. (1 ≤ n ≤ 1000, 0 ≤ m ≤ 2000000, 1 ≤ k ≤ 100) n과 m은 각각 김 조교가 여행을 고려하고 있는 도시들의 개수와, 도시 간에 존재하는 도로의 수이다. 이어지는 m개의 줄에는 각각 도로의 정보를 제공하는 세 개의 정수 a, b, c가 포함되어 ..

BOJ Code/Platinum 2022.06.15

[백준/BOJ] platinum5 - 2887번 행성 터널 (Python)

▶2887 - 행성 터널 ▶문제 때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다. 행성은 3차원 좌표 위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와 B(xB, yB, zB)를 터널로 연결할 때 드는 비용은 min(|xA-xB|, |yA-yB|, |zA-zB|)이다. 민혁이는 터널을 총 N-1개 건설해서 모든 행성이 서로 연결되게 하려고 한다. 이때, 모든 행성을 터널로 연결하는데 필요한 최소 비용을 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌..

BOJ Code/Platinum 2022.06.14

[백준/BOJ] gold3 - 1238번 파티 (Python)

▶1238 - 파티 ▶문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N) 번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라. ▶입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으..

BOJ Code/Gold 2022.06.14

[백준/BOJ] gold3 - 1937번 욕심쟁이 판다문제 (Python)

▶1937 - 욕심쟁이 판다 ▶문제 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서 대나무를 먹는다. 그런데 단 조건이 있다. 이 판다는 매우 욕심이 많아서 대나무를 먹고 자리를 옮기면 그 옮긴 지역에 그 전 지역보다 대나무가 많이 있어야 한다. 이 판다의 사육사는 이런 판다를 대나무 숲에 풀어놓아야 하는데, 어떤 지점에 처음에 풀어놓아야 하고, 어떤 곳으로 이동을 시켜야 판다가 최대한 많은 칸을 방문할 수 있는지 고민에 빠져 있다. 우리의 임무는 이 사육사를 도와주는 것이다. n × n 크기의 대나무 숲이 주어져 있을 때, 이 판다가 최대한 많은 칸을..

BOJ Code/Gold 2022.06.14

[백준/BOJ] gold3 - 11054번 가장 긴 바이토닉 부분 수열 (Python)

▶11054 - 가장 긴 바이토닉 부분 수열 ▶문제 수열 S가 어떤 수 Sk를 기준으로 S1 Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다. 예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다. 수열 A가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면서 가장 긴 수열의 길이를 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다..

BOJ Code/Gold 2022.06.14

[백준/BOJ] platinum5 - 10217번 KCM Travel (Python)

▶10217 - KCM Travel ▶문제 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세에 힘입어 구글 역시 대기업답게 비용 감축에 열을 내고 있었던 것이다. 초대장 내용에 의하면 구글은 찬민에게 최대 M원까지의 비용만을 여행비로써 부담해주겠다고 한다. 인천에서 LA행 직항 한 번 끊어주는 게 그렇게 힘드냐고 따지고도 싶었지만, 다가올 결승 대회를 생각하면 대회 외적인 곳에 마음을 쓰고 싶지 않은 것 또한 사실이었다. 그래서 찬민은 인천에서 LA까지 M원 이하로 사용하면서 도착할 수 있는 가장 빠른 길을 차선책으로 택하기로 하였다. ..

BOJ Code/Platinum 2022.06.13

[Programmers] level2 - 메뉴 리뉴얼 (Python) : 2021 KAKAO BLIND RECRUITMENT

▶메뉴 리뉴얼 (Python) : 2021 KAKAO BLIND RECRUITMENT (level 2) ▶풀이 combinations를 이용해서 메뉴별로 조합을 만든다. combinations는 중복을 허용하지 않고 조합을 만들어줘서 그것을 이용했다. 그다음에 조합이 몇 개가 등장하는지 counter함수를 이용해서 카운트했다. 이때 어떤 메뉴를 추가할지 정해야 하는데 2명 이상 주문한 코스 거나 가장 많이 주문한 코스면 된다. 그래서 조건문에 1보다 커야 하고 가장 첫 번째 값과 같을 때 추가해주는 거다. 첫 번째 값과 같아야 하는 이유는 most_common() 함수를 이용해서 자동으로 정렬시켰고, 그렇기 때문에 두 번째 코스도 첫 번째와 같이 많이 호출되었을 수도 있기 때문이다. 이거를 반복시켜주면 ..

[Programmers] level1 - 신고 결과 받기 (Python) : 2022 KAKAO BLIND RECRUITMENT (level 1)

▶신고 결과 받기 - 2022 KAKAO BLIND RECRUITMENT (level 1) ▶풀이 신고 당한 횟수가 k번 이상이면 신고한 사람이 몇번이나 신고 성공했는지 출력해주면 된다. 그에 맞는 dictionary를 생성해서 id값들을 넣어준다. result는 사람들이 몇번이나 신고 당했는지 체크해주는 dictionary이고, 신고 횟수를 1씩올려주면 된다. 마지막 for문에선 그 값에 해당하는 key값을 가지고 answer의 값을 1씩 올려주면 된다. 사실 이 문제를 글쓰는 날 푼 문제가 아니라 한참 전에 푼 문제이다. 그래서 설명 자체가 너무 별로일 수도 있다.ㅠㅠ 다음에 다시 풀어보고 설명을 제대로 적어야겠다. def solution(id_list, report, k): answer = [0] ..

[Programmers] level2 - k진수에서 소수 개수 구하기 (Python) : 2022 KAKAO BLIND RECRUITMENT

▶k진수에서 소수 개수 구하기 - 2022 KAKAO BLIND RECRUITMENT (level 2) ▶풀이 주어진 숫자를 k에 맞춰 진수로 바꿔준다. word라는 string을 하나 만들어서 k로 나눈 나머지를 계속해서 앞에다 넣어주는 방식으로 진수를 만들었다. 그다음에 숫자 '0'을 기준으로 split를 해주어 words에 저장한다. 그 숫자들을 하나씩 가지고 와서 소수인지 아닌지 확인하는 코드를 돌려 소수라면 answer를 1 증가시켜준다. https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 수..

[Programmers] level3 - 파괴되지 않은 건물 (Python) : 2022 KAKAO BLIND RECRUITMENT

▶파괴되지 않은 건물 - 2022 KAKAO BLIND RECRUITMENT (level 3) ▶풀이 처음에 아주 간단한 문제라 생각하고 풀었다. 정확성 테스트는 다 맞게 나오는데 효율성에서 시간 초과가 떴다... 카카오에서 이렇게 쉬운 문제를 낼리가 없지ㅋ 효율성 테스트 실패 코드...ㅜ def solution(board, skill): answer = 0 building = board for s in skill: if s[0] == 1: for i in range(s[1], s[3]+1): for j in range(s[2], s[4]+1): building[i][j] -= s[5] elif s[0] == 2: for i in range(s[1], s[3]+1): for j in range(s[2],..

[Programmers] level4 - 올바른 괄호의 갯수 (Python) : 연습문제

▶올바른 괄호의 갯수 - 연습문제 (level 4) ▶문제 올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모든 가능한 괄호 문자열의 갯수를 반환하는 함수 solution을 완성해 주세요. ▶제한사항 괄호 쌍의 개수 N : 1 ≤ n ≤ 14, N은 정수 ▶출력 n result 2 2 3 5 ▶입출력 예 설명 입출력 예 #1 2개의 괄호쌍으로 [ "(())", "()()" ]의 2가지를 만들 수 있습니다. 입출력 예 #2 3개의 괄호쌍으로 [ "((()))", "(()())", "(())()", "()(())", "()()()" ]의 5가지를 만..

[Programmers] level4 - 도둑질 (Python) : 동적계획법

▶도둑질 - 동적계획법 (level 4) ▶문제 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. ▶제한사항 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다. money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다. ▶출력 money return [1,2,3,1] 4 ▶풀이 dp를 이용해서 푸는 문제이지만 조건이 두 개다. 그냥 일자로 나열된 집을 도둑질한다면 아무 조건..

[Programmers] level3 - 네트워크 (Python) : DFS/BFS

▶네트워크 - DFS/BFS (level 3) ▶문제 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. ▶제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번..

[Programmers] level3 - 정수 삼각형 (Python) : 동적계획법

▶정수 삼각형 - 동적계획법 (level 3) ▶문제 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. ▶제한사항 삼각형의 높이는 1 이상 500 이하입니다. 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다. ▶출력 triangle result [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5,..

[백준/BOJ] gold4 - 9663번 N-Queen (Python)

▶9663 - N-Queen ▶문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) ▶출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. ▶풀이 def check(x): for i in range(x): if row[i] == row[x] or abs(row[x] - row[i]) == x-i: return False return True def dfs(x): global count if x == n: count += 1 else: for i in range(n): row[x] = i if chec..

BOJ Code/Gold 2022.06.10

[백준/BOJ] platinum4 - 6086번 최대 유량 (Python)

▶6086 - 최대 유량 ▶문제 농사꾼 존은 소들이 충분한 물을 마시길 원했다. 그래서 농장에서 우물에서 외양간을 잇는 N개의 배수관의 지도를 만들기로 했다. 존은 아주 다양한 크기의 배수관들이 완전히 우연한 방법으로 연결돼있음을 알았다. 존은 파이프를 통과하는 유량을 계산하고 싶다. 두 개의 배수관이 한 줄로 연결돼 있을 때 두 관의 유량 중 최솟값으로 흐르게 된다. 예를 들어 용량이 5인 파이프가 용량이 3인 파이프와 연결되면 한 개의 용량 3짜리 파이프가 된다. +---5---+---3---+ -> +---3---+ 게다가, 병렬로 연결돼 있는 배수관들은 각 용량의 합만큼의 물을 보낼 수 있다. +---5---+ ---+ +--- -> +---8---+ +---3---+ 마지막으로, 어떤 것에도 연..

BOJ Code/Platinum 2022.06.09

[백준/BOJ] gold1 - 2098번 외판원 순회 (Python)

▶2098 - 외판원 순회 ▶문제 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP)라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자. 1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이 있다. (길이 없을 수도 있다) 이제 한 외판원이 어느 한 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아오는 순회 여행 경로를 계획하려고 한다. 단, 한 번 갔던 도시로는 다시 갈 수 없다. (맨 마지막에 여행을 출발했던 도시로 돌아오는 것은 예외) 이런 여행 경로는 여러 가지가 있을 수 있는데, 가장 적은 비용을 ..

BOJ Code/Gold 2022.06.08

[백준/BOJ] gold4 - 11404번 플로이드 (Python)

▶11404 - 플로이드 ▶문제 n(2 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. ▶입력 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 1..

BOJ Code/Gold 2022.06.07
728x90