ComputerScience/Algorithm
-
[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이 인수가 될 때 까지 반복하면 끝난다..