ComputerScience
-
[LeetCode] 367. Valid Perfect ScoreComputerScience/Algorithm 2024. 4. 9. 15:23
문제성능 요약메모리: 16.52MB , 시간: 41ms 접근 방법일단 라이브러리를 사용할 수 없다는 문제 조건으로 시간 복잡도를 어떻게 줄여 나갈 것인가가 관건이라고 생각했다.제곱근은 주어진 num의 절반보다 작을 것이다.예를 들어 16의 제곱근인 4는 16의 절반보다 작다. 또한 제곱근끼리의 곱셈이 num보다 커진다면 그것은 제곱수가 아니라고 판단했다.예를 들어 15의 경우 1~8까지 탐색을 하는데, i가 4일 경우 16이 되어 15를 넘어가게 되므로 이는 15가 제곱근으로 정수를 갖지 않는다는 것과 같다고 생각했다.정답class Solution: def isPerfectSquare(self, num: int) -> bool: if num == 1: retu..
-
[LeetCode] 166. Fraction to Recurring DecimalComputerScience/Algorithm 2024. 4. 9. 15:13
문제 성능 요약 메모리: 16.9MB, 시간: 26ms 분류 ? 접근 방법 리트코드로 문제를 푸는 것이 처음이어서, class를 활용한 디버깅 방법 등을 연구하느라 시간이 좀 걸렸다. 문제로에서는 분수가 반복되는 부분을 찾는 것이 관건이겠다 생각했다. class Solution: def fractionToDecimal(self, numerator: int, denominator: int) -> str: ans = "" ans2 = "" n = numerator d = denominator if n % d == 0: return str(n//d) else: if len(str(n/d)) > 10: ans += str(n/d).split(".")[1] for i in ans: if i in ans2: bre..
-
[BOJ] 히든 넘버 - 8595ComputerScience/Algorithm 2024. 4. 9. 00:44
문제성능 요약메모리: 40192KB, 시간: 2336ms분류문자열파싱접근 방법주어진 단어들 사이에서 조건에 맞는 '숫자'들의 합을 구하는 문제였기 때문에, 문자열에서 숫자와 문자를 구분하는 법부터 알아야 된다고 생각했다. 하다 보니 매우 하드코딩이 된 것 같다.먼저 주어진 단어를 인덱스 하나씩 탐색하여 문자열의 아스키코드를 이용하는 ord()함수를 사용해서 문자인 것과 아닌 것의 처리를 다르게 할 수 있도록 분기를 나눴다.인덱스가 늘어나면서 숫자이면 number 문자열에 +연산으로 더하였고, 아니라면(즉 문자라면) 이때까지 더해서 나온 단어를 int()로 숫자화하여 결과값을 출력하기 위한 sum에 더해주었다.하지만 여기서 예외 케이스들이 몇개 있었다. 예를 들자면 'aaaaa0a009'와 같은 케이스였다..
-
[BOJ] 8진수, 10진수, 16진수 - 11816ComputerScience/Algorithm 2024. 4. 6. 14:24
문제https://www.acmicpc.net/problem/11816성능 요약메모리: 31252 KB, 시간: 40 ms분류사칙연산구현수학파싱문자열접근 방법주어진 조건에 맞게 분기를 나누었다.8진수는 0부터 시작하고, 16진수는 0x로 시작한다. 이에 맞게 주어진 입력을 처리하면 되었고, 문자열은 슬라이싱이 가능하기 때문에 이를 활용하였다. 잘 모르고 있었던 것은 8진수, 16진수로의 변환과 int()의 사용법이었다.정답import sysinput = sys.stdin.readlinex = input().rstrip()if len(x) >= 2: if (x[0] == "0") & (x[1] == "x"): print(int(x[2:], 16)) elif x[0] == "0": ..
-
[BOJ] 숫자의 합 - 11720ComputerScience/Algorithm 2024. 4. 5. 14:27
문제 성능 요약메모리: 31120 KB, 시간: 44 ms분류구현수학문자열접근 방법일렬로 들어오는, 구분자가 없는 문자열을 어떻게 처리할지 고민했다.split() 함수를 사용할 수 있었다. 하지만 split()은 공백, 쉽표 등의 구분자가 존재해야만 했고 이를 사용할 수 없다는 것을 알게 되었다.공백이 없는 문자열을 자르기 위해서는 list()를 사용할 수 있었다. 하지만 list()는 input()으로 들어온 모든 문자열을 문자 하나씩 원소화한다. 따라서 '\n'과 같은 개행문자도 원소에 포함한다.이를 위해서 rstrip()을 활용해 '\n'을 제거하였다.정답import sysinput = sys.stdin.readlinen = int(input())b = list(map(int, list(input(..
-
[BOJ] 소인수분해 - 11653ComputerScience/Algorithm 2024. 4. 5. 10:58
문제 접근 방법부끄럽지만 일단 소인수 분해에 대해 다시 찾아봤다..소인수분해란, 어떤 자연수를 소인수(소수인 인수)들의 곱으로 나타내는 것이다. 그렇다면 '소수'란 무엇인가?소수는 1과 자기 자신만을 인수로 갖는 수를 말한다. 그렇다면 우리가 구해야 할 것은 '소수'라고 생각해서, 나눠주는 과정 속에서 그 다음 소수로 나눠주고, 안나눠지면 또 다른 소수를 나눠주면 되겠다 생각했다.while n == i: if n % i != 0 : n = n // i; print(i) else: i += 1 if i % 2 == 0: i += 1 다음과 같이 접근하여, 자연수를 소수를 인수분해 하면 n이 인수가 될 때 까지 반복하면 끝난다..
-
[OS] 주소 공간, 메모리 관리 API, 주소 변환의 원리ComputerScience/OS 2024. 3. 26. 01:13
이 글은 'OSTEP: Operating Systems Three Easy Pieces'를 참고하여 쓴 글로, 학습 기록용으로 작성된 글입니다. 따라서, 정확하지 않은 내용이 있을 수 있습니다. 옳지 않은 정보가 있다면 지나치지 마시고 수정 요청 댓글 달아주시면 감사하겠습니다. 🙂 16. 주소 공간의 개념 16. 1 초기 시스템 초기 시스템에는 메모리에 하나의 프로세스만 적재되었다. 특별한 가상화는 존재하지 않았다. 16. 2 멀티프로그래밍과 시분할 멀티프로그래밍 고가의 장비를 효율적으로 다루기 위한 시도로 멀티프로그래밍이 대두되었다. 여러 프로세스가 실행 준비 상태에 있으면 OS는 이 사이를 전환해가면서 실행했다. 시분할 일괄처리방식(batch computing)의 한계를 느껴 많은 사용자가 동시에 컴..
-
[OS] Swap, File-backed Page, DMAComputerScience/OS 2024. 3. 22. 15:01
10주차에 들어섰다. 이번 주차의 키워드들 중에서 내가 맡은 키워드는 swap disk, file-backed page, DMA이다. DMA는 이전에도 나왔던 키워드이긴 하지만 swap disk와 file-backed page는 처음 만나는 개념들이다. 한 번 살펴봐보자. Swap Swap RAM이외의 저장 공간을 사용하여 시스템의 가상 메모리 용량을 확장하는 기법이다. 보조적인 저장장치(HDD, SSD)에 있는 스왑 공간이나 스왑 파일을 이용한다. 스왑을 통해 운영체제는 RAM의 한계를 넘는 메모리 요구를 충족하고 더 많은 프로그램을 동시에 실행할 수 있게 된다. 가상 메모리(Virtual Memory)란? 메인 메모리의 크기가 한정되어 있는데 메인 메모리보다 크기가 큰 프로세스를 실행해야 한다면? 에..