본문 바로가기
[백준][파이썬] 1759 암호만들기 시간초과가 안났다!!!!!1 일단, 핵심은 N과 M(2)번을 응용한것과 거의 동일하다. (N과 M 시리즈를 계속 반복해야겠다.) 숫자를 알파벳으로, 그리고 리턴하기전에 하나의 조건만 달아주면 끝! L , C = map(int,input().split()) lit = list(map(str,input().split())) s = "s" lit.sort() visited=[False]*C def per(depth,idx,stack,lit): if depth == L: count =0 for check in stack: if check in ["a",'e','i','o','u']: count +=1 if count > 0 and L-count > 1: print("".join(map(str,stack))) f.. 2020. 4. 6.
[백준][알고리즘] 14888 연산자 끼워넣기 def plus(a,b): return a+b def minus(a,b): return a-b def multi(a,b): return a*b def div(a,b): if a 이전 문제의 방식을 응용을 통해서 재귀함수가 상당히 깔끔해졌다. 리스트를 만드는 방식, enumerate 또한 적절히 잘 활용했다. num = int(input()) numlist = list(map(int,input().split())) calu = list(map(int,input().split())) mx = -10**9 mn = 10**9 # 가능한 조합 생성 하기 calu_t = calu[0] * "+" + calu[1] * "-" + calu[2] * "*" + calu[3] * "/" check = [False] * .. 2020. 4. 6.
[백준][파이썬] 10971 원판원 순회2 - 시간초과.. num = int(input()) money = [] for i in range(num): tem = list(map(int,input().split())) money.append(tem) lit = [] ans = 10**8 def permu(visited,k): global ans if k == num: temnum =0 lit.append(visited) tem = visited for j in range(num - 1): if money[tem[j] - 1][tem[j + 1] - 1] == 0: temnum =0 break temnum += money[tem[j] - 1][tem[j + 1] - 1] if money[-1][tem[0]] == 0: temnum = 0 else: temnum +=.. 2020. 4. 6.
[백준][파이썬] 10819 차이를 최대로 모든 순열를 구한 방법으로 아래코드처럼 구현했더니, 시간초과가 났다. 다른 풀이들을 보니, itertools를 이용해서 구했던데, 실제 코테에서 itertools를 못쓴다는 말이 있어서 고민이 많다. num = int(input()) lit =list(map(int,input().split())) lit.sort() def go(lit): total =0 for i in range(0,num-1): cnt = lit[i] - lit[i+1] if cnt0 and lit[i-1] > lit[i]: i -= 1 if i == 0: return 0 t = go(lit) if ans lit[j] and j>0: j -= 1 lit[i-1],lit[j.. 2020. 4. 5.
[백준][파이썬] 10974 모든 순열 "다음 순열" 방식을 이용해서 코딩을 했다. 하지만 아직 남은 의문이 있다.. 왜 len(lit) == 2를 continue를 추가로 작성해줘야하는지 의문이다. lit가 2일때 넘겨주면 len(lit)에서 타입에러가 발생하여 저렇게 처리해주긴했지만, 왜그런지는 아직 에러를 못잡았다. num = int(input()) def per(lit): n = len(lit)-1 i = n while i>0 and lit[i-1] > lit[i]: i -= 1 if i == 0: return 0 print(*lit) j = n while lit[i-1] > lit[j] and j>0: j -= 1 lit[i-1],lit[j] =lit[j],lit[i-1] j = n while i < j: lit[i] ,lit[j] .. 2020. 4. 5.
[백준][파이썬] 11403번: 경로찾기 BFS문제 BFS 문제인 이유: 인접 행렬들을 하나씩 True 해나가는 과정이기떄문. 사실 DFS로 풀어도 될것같긴하다 어차피 False처리를 계속 해주기때문에 메모리나 시간에 있어서도 비슷할것 같다는 생각이 든다. 핵심은 1. 초기값 dfs안에 한번에 stack변수에 저장(배추문제에서도 했다.) 2. collection 이용하여 시간단축 복잡하지 않은 문제였다. import collections num = int(input()) lit =[] visited = [[False for i in range(num)] for j in range(num)] for i in range(num): t = list(map(int,input().split())) lit.append(t) def dfs(stack): stack =.. 2020. 4. 2.
[백준][파이썬] 10973 이전순열 [핵심] 다음 순열과 원리가 반대이다 1. 왼쪽이 큰경우를 찾아주기 2. 그 수 보다 오른쪽에 있는 그 보다 작은 수 찾기 3. 두 개의 숫자 바꾸고 오름차순 정렬 *오름차순 정렬을 할때 이중포문을 해서 하면 시간초과가 난다. 대신 순열 특성상 이미 내림차순이 되어있다는 점을 활용하여 while문으로 뒤집어주면 된다. 사실 위에 말한 내용을 이해하려고 하면 쉽지 않을것이다. 로직을 스스로 작성하면서 봐야지 이해가 쉽다. num = int(input()) lit = list(map(int,input().split())) def recu(lit): n = len(lit) -1 i = n-1 while lit[i] 2020. 4. 2.
[백준][파이썬] 10972 다음순열 https://statssy.github.io/pro/2019/09/03/baekjoon_10972/를 참고했다. [백준 문제] P10972 다음 순열(파이썬) [백준 문제] P10972 다음 순열(파이썬) statssy.github.io def next_permutation(a): n = len(a) - 1 i = n while i > 0 and a[i-1] >= a[i]: i -= 1 if i == 0: # 마지막 순열 return False j = n while a[i-1] >= a[j]: # 오른쪽에 있으면서 a[i-1]보다 큰 수 j -= 1 a[i-1], a[j] = a[j], a[i-1] # SWAP j = n while i < j: a[i], a[j] = a[j], a[i] # a[i]부터.. 2020. 4. 2.
[백준][파이썬] 7569 토마토(2) - 3차원 [핵심] 3차원 리스트를 활용하고 index를 맞게 조절해주느라 조금 헷갈렸다. 나는 기본적으로 z축을 먼저 정렬하여 [z][x][y]구조로 생각했다. 최단거리 문제는 BFS가 어울린다. 왜냐하면 동시에 카운팅을 해주어야 하니까. *한번에 stack를 모두 처리하기 위해 while안에 포문을 한번더 설정해준것. *초기값 모두 한번에 해결하기 위해 dfs안 while밖에 포문으로 stack에 넣어준것 이 핵심이였다. 꼭 반복 연습하자 import collections #dq를 활용 m,n,h = map(int,input().split()) total =[] for i in range(h): lit =[] for j in range(n): t = list(map(int,input().split())) lit.. 2020. 4. 1.