본문 바로가기

스터디-공부62

리스트의 합 리스트의 합: 연결리스트로 숫자를 표현할 때 각 노드가 자릿수 하나를 가리키는 방식으로 표현할 수 있다. 각 숫자는 역순으로 배열되어 있는데, 첫 번째 자릿수가 리스트의 맨 앞에 위치하도록 배열된다는 뜻이다. 이와 같은 방식으로 표현된 숫자 두 개가 있을 때, 이 두 수를 더하여 그 합을 연결리스트로 반환하는 함수를 작성하라. 입력 : (7→1→6) + (5→9→2), 즉 617 + 295 출력 : 2→1→9, 즉 912 class Node: def __init__(self, val=0, next=None): self.val = val self.next = next def sum_of_two_linked_list(a, b): number_a = linked_list_to_number(a) number_b.. 2023. 8. 25.
단방향 연결리스트의 중간 노드 삭제 중간 노드 삭제: 단방향 연결리스트가 주어졌을 떄 중간(정확히는 가운데 노드일 필요는 없고 처음과 끝 노드만 아니면 된다)에 있는 노드 하나를 삭제하는 알고리즘을 구현하라. 단, 삭제할 노드에만 접근할 수 있다. 삭제할 노드(A) 접근 → 다음 노드(B = A.next) 접근 → A.next = B.next, A.value = B.value 하면 A 노드가 사라지게 된다. 코드 class Node: def __init__(self, val=0, next=None): self.val = val self.next = next def delete_node_in_middle(node_to_delete): # 첫 번째 노드나 마지막 노드는 삭제할 수 없다고 명시되어 있기 때문에 고려하지 않음. # 다음 노드의 값.. 2023. 8. 24.
정렬되어있지 않은 연결리스트의 중복 없애기 중복 없애기: 정렬되어있지 않은 연결리스트가 주어졌을 때 이 리스트에서 중복되는 원소를 제거하는 코드를 작성하라 (+ 임시 버퍼를 사용할 수 없다면 어떻게 풀 수 있을까?) 문제를 듣고 바로 든 생각 Set을 이용하여 풀 수 있지 않을까? 임시 버퍼가 없다면 반복문 2개로 해결할 수 있지 않을까? 해결 코드는 따로 적지 않는다. python에서 LinkedList를 구현 위한 Node Class 정의하기. 아래와 같이 Class를 정의 할 수 있다. class Node: def __init__(self, val=0, next=None): self.val = val self.next = next 정의된 Node Class는 아래와 같이 사용할 수 있다. node2 = Node(2) node1 = Node(.. 2023. 8. 23.
문자열 회전 문자열 회전: 한 단어가 다른 문자열에 포함되어 있는 판별하는 isSubstring이라는 메서드가 있다고 하자. s1과 s2의 두 문자열이 주어졌고, s2가 s1을 회전시킨 결과인지 판별하고자 한다(가령 'waterbottle'은 'erbottlewat'을 회전시켜 얻을 수 있는 문자열이다). isSubstring 메서드를 한 번만 호출해서 판별할 수 있는 코드를 작성하라. 그냥 문자열 length 만큼 한칸씩 돌려가면서 일치하는 경우가 있는지 확인하면 되는거 아닌가 생각이 들었다. def is_substring(a, b): char_array = list(b) for i in range(len(char_array)): char = char_array.pop(0) char_array.append(char.. 2023. 8. 22.
행렬 90도 회전 #### 행렬 회전: 이미지를 표현하는 N x N 행렬이 있다. 이미지의 각 픽셀은 4바이트로 표현된다. 이때, 이미지를 90도 회전시키는 메서드를 작성하라. 행렬을 추가로 사용하지 않고서도 할 수 있겠는가? - N x N 행렬 - 90도 회전 - 행렬 추가 사용 금지 위 조건들을 기반으로 생각을 해보자. 일단 행렬 추가 사용 금지 라고 했기 때문에 swap 하는 방식으로 처리가 되야 할 것이다. 문제를 간략화해서 다음과 같이 생각해보자. 아래와 같은 행렬이 있다고 하자. ``` [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ] ``` 이 행렬을 90도 회전하면 다음과 같을 것이다. ``` [ [13, 9, 5, 1], [14, 10, .. 2023. 8. 21.
macbook pro m1 에서 리눅스 커널 빌드해보기 최근에 스터디를 시작하게 되었다. 스터디에서 진행하는 것 중 하나는 운영체제 (aka 공룡책) 스터디이다. 이번 범위는 1~2장 이였는데 발표자료는 여기에 올려두었다. 2장 뒷 부분에는 리눅스 커널 빌드에 대해 설명하는 부분이 나온다. 발표용 슬라이드를 만들던 나는 이게 진짜 될까? 라는 생각이 들었었다. 그래서 시도해보았다. 그런 짓은 하지 말아야 했는데 Linux 커널 빌드해보기 책에서 소개한 순서는 다음과 같았다. http://www.kernel.org 에서 linux 소스 코드를 다운로드 한다. “make menuconfig” 명령을 사용하여 커널을 구성한다. 이 단계는 .config 구성 파일을 생성한다. “make” 명령을 사용하여 메인 커널을 컴파일한다. make 명령은 .config파일에서.. 2023. 8. 21.