PYTHON

    [백준 11005] 진법 변환 2 - 파이썬

    백준 11005번은 '주어진 10진법 수 N을 사용자가 지정한 진법 B로 변환하는 알고리즘'을 만드는 문제입니다. 원리만 이해하면 생각보다 간단하게 풀 수 있습니다. 간단한 예시를 통해 이해하고 답을 보겠습니다. 예시 10진수 10을 2진수로 변환하는 경우: N = 10, B = 2 10진수 -> B진법 변환은 나머지를 기록해둘 필요가 있습니다. 또한 10진수 값 N 을 B로 나눴을 때 몫을 기억해둘 필요가 있습니다. 지속적으로 업데이트 해주어야 합니다. 10 % 2 = 0 --> 나머지 = "0" N // B : 10 // 2 = 5 --> 몫 = "5" N = 5 (i.e. N = N // B) 5 % 2 = 1 --> 나머지 = "1" N // B: 5 // 2 = 2 --> 몫 = "2" 2 % ..

    [백준 2563번] 색종이 - 파이썬

    백준 2d array 부분 색종이 알고리즘에 대해 풀어보겠습니다. (https://www.acmicpc.net/problem/2563) 처음 이 문제를 접했을 때 들었던 생각은 각 색종이 area를 구하여 더함 교집합 영역을 구함 하나의 교집합 영역만 전체 area에 남겨두고, 나머지는 뺌 그런데 이렇게 처리하면 예외 케이스가 많이 생겨 너무 복잡도가 증가한다는 단점이 있었습니다. 단순하게 생각해보면, A라는 100 x 100 매트릭스가 있다고 가정했을때, 겹치든 겹치지지 않든, 색종이가 영역을 덮고 있다면 A[i][j] 의 값을 1로 설정하고 그렇지 않다면 0으로 설정하면 불필요한 예외 처리 없이 문제를 해결 할 수 있습니다. 정답 코드는 다음과 같습니다. if __name__ == '__main__..

    python 리스트 요소 한 줄로 한번에 출력 print(*arr)

    코딩 테스트를 풀다보면, 한 줄에 리스트 내 모든 값을 출력해야할 때가 있습니다. 이럴 때 보통 접근하는 방법은 아래처럼 for문을 활용하는 경우가 있습니다. arr = [1, 2, 3, 4, 5] for i in range(len(arr)): print(i, end=" ") 이렇게 for 문을 돌리지 않고 출력하는 방법은 사실 매우 간단합니다. 단순하게 출력하고자하는 리스트 앞에 *를 붙여주어 print문에 넣어주면 됩니다. --> print(*arr) arr = [1, 2, 3, 4, 5] print(*arr) # 1 2 3 4 5 print(arr) # [1, 2, 3, 4, 5] 리스트에 별표 (asterick; *)를 활용하면 리스트 압축을 해제하기 때문입니다.

    [pytorch] 파이토치 opencv, mxnet, torchmetrics 설치 시 gpu 인식 불가 이슈 해결

    pytorch나 tensorflow를 다루다보면 어떠한 패키지를 설치했을 때, 패키지가 cpu 버전으로 내려가는 이슈가 있어서 gpu 인식을 못한다. 이때 해결하기가 굉장히 번거로운데, 필자 같은 경우에는 가상환경을 처음부터 재설치했다. 이런 이슈는 특히 텐서플로우보다는 pytorch에서 더 많이 발생했다. 그중에서도 많이 설치하는 라이브러리를 위주로 몇개 설명을 하자면... opencv 이 패키지는 왜인지는 모르겠지만 conda를 통해 opencv를 설치했을 때는 pytorch에서 cuda를 인식하지 못하게 되었다. 이 경우 pip install opencv-python 명령어를 통해 설치하면 말끔하게 해결되니 참고하자. mxnet mxnet과 같은 경우도 정상적으로 설치하면 문제가 되지 않으나.. ..

    [python] 파이썬 class의 __call__ 함수 (매직메소드)

    파이썬을 다루다보면 __call__함수에 직면하는 경우가 생깁니다. 저와 같은 데이터 사이언티스트의 경우에는 __call__함수는 Tensorflow의 def call() 메서드나 PyTorch의 def forward() 메서드가 대표적이라고 할 수 있는데요. 인스턴스를 생성하고 자동으로 클래스의 객체도 호출할 수 있게 만드는 기능입니다. 아래처럼 리스트를 받아 난수 10개를 뿌려주는 난수생성기 클래스로 표현되었다고 생각해봅시다. 인스턴스 메서드 구현 아래처럼 pick 메서드를 활용할 때, 출력물이 생성되고, 10개의 난수를 담은 리스트가 리턴되는 것을 확인할 수 있습니다. import random class RandomNumberReturn: def __init__(self): self.numbers ..

    [python] 클래스 메서드(class method)와 정적 메서드(static method)

    1. 클래스 메서드 (Class Method) 아래의 코드처럼 일반적으로 클래스 내에서 함수를 정의하고 사용하는 메서드는 객체에 소속되는 인스턴스 메서드이다. class Human: def __init__(self, age, name): self.age = age self.name = name def intro(self): print(str(self.age) + "살 " + self.name + "입니다.") park = Human(13, "박진명") park.intro() Human 클래스의 intro 메서드는 첫 번째 인수 self를 받아 이 객체에 대한 작업을 수행한다. 따라서, park 객체에 대해 호출되며, 해당 인스턴스의 나이와 이름을 조사하여 출력한다. 즉 park.intro() 메서드에서 ..

    [PyTorch] 파이토치를 활용한 선형회귀 구현

    (본 포스팅은 PyTorch로 시작하는 딥 러닝 입문 교재를 참고하여 작성하였습니다.) 선형회귀를 구현하기에 앞서 아래 지식이 선행되면 이해하기 더 쉽습니다 :) 가설 (Hypothesis) 손실 함수 (= 목적 함수 = 비용 함수) ; loss function = objective function = cost function 경사 하강법 (Gradient Descent) 공부시간과 시험 성적에 대한 데이터가 아래 테이블처럼 나와있다고 가정해보겠습니다. Study Hours (x) Result (y) 1 20 2 40 3 60 4 ? 1시간 공부 --> 20점 2시간 공부 --> 40점 3시간 공부 --> 60점 4시간 공부 --> ??점 선형회귀를 이용하여 시험 성적을 예측한다면, 아래의 패턴을 학습하..

    [python] stack 구현 (고정길이 스택 fixed stack, class 활용)

    (본 포스팅은 Do It! 시리즈의 '자료구조와 함께 배우는 알고리즘 입문 - 파이썬편'을 참고하여 작성하였습니다.) 데이터를 임시 저장하는 기본 자료 구조는 대표적으로 두 가지가 있는데, 스택(stack)과 큐(queue)이다. 스택은 일반적으로 데이터 입력과 출력 순서가 후입선출(Last in First Out)인 것이 특징이다. 이 기능을 구현하기 위해서 우리가 생각해봐야할 부분은 어떤 것이 있을까? 크게 살펴보자면 첫째로, 데이터를 집어 넣는 push 기능 둘째로, 데이터를 꺼내는 pop 기능 셋째로, 스택의 길이를 알려주는 len 기능 넷째로, 스택이 비었는지 확인하는 기능 다섯번 째로, 스택이 가득 차 있는지 확인하는 기능 여섯번 째로, 특정 값이 스택 어디에 위치해있는지 확인하는 기능 일곱번..