일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- coding test
- 알고리즘
- Python
- 백준
- object detection
- 프로그래머스
- computer vision
- 논문
- reinforcement learning
- 모두를 위한 딥러닝
- 내용추가
- Today
- Total
목록전체 글 (41)
NISSO
나의 첫 백트래킹 문제.. 내 힘으로 못 풀었다. 검색을 통해 공부하면서 이해하고 두가지 방법을 알게 됐다. > 1번째 방법 a,b = map(int, input().split()) l = [0 for _ in range(b)] def back(a,b,i=0): if b==i: print(*l) return for j in range(a): l[i] = j+1 back(a,b,i+1) back(a,b) 이게 처음 푼 코드 재귀를 이용해 해결하는 방법이다. 6번째줄 print(*l)은 처음 알게 된 건데, 반복문을 쓰지 않고 리스트 내 모든 원소를 공백으로 구분해서 출력할 수 있다. 다른 사람들 답을 보면서도 항상 나왔던 건데, 찾아보지 않다가 이제야 알게 됐다. a = [1,2,3,4] for i in ..
a,l = int(input()), [] for _ in range(a): l.append(int(input())) l.sort() from collections import Counter c = Counter(l).most_common() m = c[0][0] if len(c)
둘의 가장 큰 차이점은 반환값이다. sort()는 반환값이 없이 (None) 원래 리스트를 정렬해준다. 반면, sorted()는 정렬한 리스트를 반환하는 대신 원래 리스트는 변하지 않는다. m = [1,3,6,2,5] sorted(m) #1 m.sort() #2 1 실행 후 print(m)을 확인하면 원래 값 그대로 나온다. 원리스트를 바꾸고 싶다면 m = sorted(m) 으로 저장해주면 된다. 2 실행 후 print(m)을 확인하면 정렬된 리스트가 출력된다. for i in sorted(m): print(i) #1 for i in m.sort(): print(i) #2 for문에서 큰 차이를 느낄 수 있다. sorted()는 정렬된 리스트를 반환하기 때문에 잘 실행되지만 sort()로 돌리면 에러가 ..
나에게 혼란을 줬던 문제다. 직접 그려봐도 알 것 같은 느낌만 주고 전혀 모르겠던 문제. 재귀는 BFS/DFS로 가는 길에 얼른 풀어보고 끝내려고 했으나 난관이었다. 하지만 그만큼 중요하고 기본적인(?) 문제다. 코드를 보기 전에 문제 해결 방법을 먼저 이해하려고 본 유튜브 영상이다. 영어 영상들 사이에서 고마운 영상이었다. (문제 규칙을 이해했다면 3:37부터, 근데 앞부분 설명이 재밌음) 하지만 영상을 두 번 봐도 내 머리로는 정확히 이해가 안 돼서 바로 코드를 봤다. def hanoi(n, start, end): if n==1: print(start, end) return hanoi(n-1, start, 6-start-end) print(start, end) hanoi(n-1, 6-start-end..
해당 문제는 재귀 카테고리에 있어서 재귀함수로 풀었다. 바로 전 문제가 팩토리얼 문제여서 재귀로는 쉽게 풀었다. def fibo(n=int(input()), i=1): if n>2: return fibo(n-1) + fibo(n-2) return 0 if n==0 else 1 print(fibo()) 그리고 다른 코드를 구경(?)하는데 변수를 dp로 설정했더라. 알진 못해도 들어본 적은 있어서 바로 검색해봤다. DP는 동적계획법 (Dynamic Programming)으로 상향식 접근법이며 실행시간이 현저히 줄어든다는 장점이 있다. 이전에 계산한 값을 메모리에 저장해 다시 계산하지 않도록 하는 Memoization 기법을 사용한다. n = int(input()) dp = [j for j in range(n..
for문을 사용해 구현할 수도 있지만 백준 문제 카테고리가 재귀라서 재귀함수를 사용해봤다. 간단한 코드인데 혼자 힘으로는 못했고 서치로 알아냈다... 봤던 건데 실제로 안 써보니 까먹은 것 같다. def factorial(n=int(input())): if n>1: return n*factorial(n-1) return 1 print(factorial()) 최종 출력할 값을 fct로 놓고 곱할 값을 i로 놓고 별 짓을 다 해봤지만 시간 낭비였다. 재귀함수에 n을 곱할 생각을 못했다. 아무튼 간단하고도 필수적으로 알아야할 코드니 다신 잊어먹지 않겠다. + 재귀나 for문 외에 더 쉬운 방법이 있다. import math n = int(input()) print(math.factorial(n)) 파이썬 표준..
처음으로 백준 문제를 풀어보려고 쉬운 것부터 도전해보는데 이 문제에만 20분을 쏟았다. 예제 답도 완벽했는데 도대체 뭐가 문제였을까. 문제 1. 프로그래머스만 이용해본 입장에서, 함수 형식이 아니라 input()으로 그 때 그 때 입력받는 방식인 걸 몰랐다. 특히 예제 첫줄만 a로 받고 아래를 모두 b로 한 번에 받았는데, 서치해보니 한 줄씩 받고 바로 출력하는 것이었다. 문제 2. 반례가 있다. 1 1 0 답은 0.000% 인데 100.000%가 나왔다. 정말 작은 실수였다.. 반복문에 b 전체를 받은 것. b[0]은 학생 수라서 b[1:]로 계산해야 맞는 거다. 뒷부분은 b[1:]로 잘해놓고 여기선 생각도 못했다. 다음은 수정한 내 코드다. a = int(input()) for _ in range(a..
리스트 자체로 True / False 결과를 출력할 수 있다. def list_boolen(lst): if lst: print(True) else: print(False) list_boolen([1,2]) list_boolen([]) 답은 True, False while 반복문에선 아래와 같이 활용할 수 있다. i = 1 a = [1,2,3,4] while a: print(i) i += 1 a.pop(0) 이렇게 하면 1,2,3,4까지 나오고 멈춘다. a.pop(0)을 안 해주면 무한히 실행된다. + 문자열도 가능하다. ''는 False. ' '는 True