본문 바로가기
반응형

파이썬14

[ 프로그래머스 ] 자물쇠와 열쇠 파이썬python 풀이 // 문제 요약 돌려서 끼워 넣을 수 있는 M x M 열쇠가 있을때 돌릴 수 없는 N x N 의 자물쇠가 열리는지 안열리는지 확인해라. 단, 자물쇠의 열림 조건은 모든 값이 1 이되는가 이다. // 풀이 전형적인 브루투스 포스 (전체 탐색) 문제. 특히 N과 M 이 3 이상이면서 20을 넘지 않는 수로 주어지므로 충분히 for문을 여러번 사용해도 되는 문제라고 할 수 있다. 고고학자 튜브가 나와서 유치원생 문제처럼 그림을 그려놓았지만 사실은 복잡한 여러겹의 루프를 적절한 단위의 테스크로 나누고 각각 모듈화하여 조합할 수 있는가를 묻는 문제이고 최근 딥러닝 프레임워크들이 지향하는 바를 이해하고 구현할 수 있는가 물어보는 느낌도 받았다. 특히 Convolution생각이 많이 났다. 열쇠를 돌리는 과정에서는 .. 2021. 6. 2.
[ Python 삽질 ] List의 원소가 한번에 다 바뀔때 deep copy? shallow copy? 사실 이번 글은 정말 부끄러운 내용이다... 초보적인 실수이면서도 정말 잘 고쳐지지 않는 내용이므로 확실하게 짚고 넘어가고자 한다. // 문제 상황 코딩 테스트를 보는데 이미지나 표가 나왔다. 리스트의 리스트를 만들어서 행렬처럼 쓴다고 가정하자. 먼저 zeros를 만들면 이렇게 해서 이렇게 나올 것이고 그다음 이렇게 가운데에 행렬을 복사해 넣어서 zero padding 효과를 주고 싶다고 하면 잘 될까? 결과는 이렇게 나온다. 특히나 numpy의 array를 많이 접해본 경험이 있거나 list 안에 단순한 숫자가 아닌 여러 다른 특성의 객체를 담게 되는 경우 이런 실수는 정말 무의식 중에 비일비재하게 일어난다. // 해결 방안 사실 현장에서는 꼭, 굳이 list of list를 만들어서 사용해야 되는 상.. 2021. 6. 2.
[ 프로그래머스 ] 야근 지수 파이썬python 풀이 // 문제 요약 야근을 하면 남은 일의 업무량을 제곱한 만큼 피로도가 쌓인다고 할때 남은 근무시간과 업무량이 리스트로 주어지면 최소의 야근 피로도는 얼마인가 // 풀이 효율성까지 따지는 이번 문제는 알고리즘으로는 힙 문제라고 할 수 있는데 단순히 힙 문제라고 하기엔 거의 모든 알고리즘 문제가 그러하듯 수학적 사고력 문제라고 할 수 있다. 우선 수학적 접근으로 이 문제를 보면 합이 일정한 수들의 제곱의 합이 최소가 되도록 하는 방법은 무엇인가? 라고 할 수 있다. 이런 간단한 문제들은 조금만 생각해 봐도 엄청 어렵다는 것을 알 수 있는데 제한 조건이 1개인 상황이어서 수가 3개 이상만 되어도 일반적인 제곱의 합을 단 하나의 매개변수에 대하여 알아내기가 불가능하기 때문이다. 그래도 감을 잡기 위해서 그림으로.. 2021. 6. 1.
[ Codility 코딜리티 ] Lesson 3 FrogJmp Python파이썬 풀이 //문제 요약 개구리가 길을 건너고자 한다. 이 개구리는 지금 X위치에 있고 한번 점프할 때 마다 D 만큼 이동할 수 있는데 Y 보다 크거나 같은 지점까지 갈 수 있는 최소 점프 횟수는 얼마인가? // 풀이 이 문제는 while문 같은게 바로 떠오르는 아주 간단한 문제다. 하지만 X로 부터 Y 가 아주 멀고 D가 아주 작은 경우에는 while로 돌릴경우 시간 복잡도가 올라갈 수 있다. 따라서 X, Y 사이의 거리를 먼저 구하고 D로 나누어 주는 방식으로 루프를 피해서 간단히 계산할 수 있다. while의 경우 O(n)이 걸릴 것으로 예상되고 나눗셈의 경우 O(1)이 걸릴 것으로 예상되므로 나눗셈을 선택하는 것이 옳다. 코드를 먼저 보자. def solution(X, Y, D): # write your c.. 2021. 4. 17.
[ Baekjoon 백준 ] # 10953 번 Python 풀이 이 문제를 처음 풀때는 설명이 빈약하여 어떻게 해야할지 굉장히 난감했다. 이 문제를 통하여 백준이 어떤 유형의 입출력을 선호하는지 알아보자. 이게 백준에 있는 원본 문제다. 얼핏봐서는 음 그렇군 할만한 내용인데 예제를 보면 이렇다. 여기서 좀 이상한 점을 느꼈다. 아니 iterable 하게 캐이스를 주는건가? 아니면 1회 실행당 1 번의 캐이스가 입력되는 것인가? 이런 저런 가능성들 때문에 정말 많은 시도를 해보고 나서야 이 간단한 덧셈을 풀 수 있었다. 아래 코드를 보자. for _ in range(int(input())): print(sum([int(n) for n in input().split(",")])) 그렇다. 간단하게 말하면 터미널에서 XXX.py 를 실행 한 후 저기 예제입력1 옆에 있는 .. 2021. 4. 10.
[ 자취방 워크스테이션 ] #12 주피터 노트북 시작해보기 //1 주피터 노트북은 웹 기반의 파이썬 코딩을 할 수 있는 웹 에디터이다. 대화형 인터프리터의 특성을 아주 잘 살려서 '셀'이라는 단위의 코드를 실행하는 것이 가능하고 순차적으로 실행하는 것 말고도 임의의 순서로 셀을 실행해는 것이 가능하기 때문에 클래스와 같은 객체지향적 성격을 가지는 코드를 짤 때 아주 유용하다. 물론, 파이썬에 특화되어있긴 하지만 일반적인 에디터의 기능 또한 가지고 있어서 C/C++등의 코드 또한 다룰 수 있다. (컴파일러는 따로 없다.) //2 주피터 노트북의 사용이 중요한 이유 앞서 말했듯 웹 기반의 에디터이기 때문에 여러 군데에서 사랑받고 있는데 특히나 구글의 코랩이 이러한 노트북 형태를 가지고 있다. 또 아마존의 AWS, 구글의 GCP와 같은 클라우드 컴퓨팅에서도 굉장히 유.. 2021. 2. 11.
반응형