알고리즘/문제 풀이

    [Python/파이썬 프로그래머스] 튜플

    programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 2019 카카오 개발자 겨울 인턴십 문제 풀이 우선 주어진 s의 값을 replace를 써서 다듬고 리스트 형변환을 시켜줬씁니다. 그 다음 출력값이 입력 index에 상관없이 입력 갯수가 작은거부터 출력시켜줘야해서 cnt 값에 갯수랑 index값을 넣어준 뒤 cnt 값 따라가면서 flag로 기존에 존재하는 값인지 체크해주고 없..

    [Python/파이썬 11057 백준] 오르막 수 (다이나믹 프로그래밍)

    www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 풀이 10844 쉬운 계단수 문제랑 굉장히 유사한 문제입니다.. 유사한 문제 풀어보면 쉽게 풀리네용... 주의할 점은 첫번째 0인 숫자가 들어갈 수 있다는거구, 오름차순 숫자 갯수를 찾아야합니다. 또한 이차원 리스트 사용 숫자를 일일히 구하다보면 공통점이 있는데 마지막 수가 0일 경우 다음 숫자는 1~9가 가능하고 1일 경우 2~9 2일 경우 3~9 . . . 9는 다음 숫자..

    [Python/파이썬 백준 13913] 숨바꼭질 4 (BFS)

    www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 다른 숨바꼭질 문제랑 같지만 path를 하나 더 써줘서 nx 인덱스에 전에 방문했던 x를 넣어줬습니다. 그 뒤 path[end]에 값을 따라가다보면 start가 나오게됩니다. import sys from collections import deque input=sys.stdin.readline start,end=map(int,input().split()) graph=[-1]..

    [Python/파이썬 15990 백준] 1, 2, 3 더하기 5

    www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 1차원으로 계속 규칙을 찾으려니 30분정도 봤는데 못찾았다.. 어렵네용... 답을 참고해서 이해한 내용을 적자면 dp [1], dp[2], dp[3]에 각각 1,2,3으로 끝나는 상황을 넣는다. ex) dp[3] 은 2 1 1 2 3 이 예시와 같이 끝나는 숫자가 1일때 2일때 3일때 각각 1개씩이다 그 후 n이 만약 6인 상황에서 dp[5]에서 2로 끝난거 +1을 해주거나, 3으로 끝난거에 +1을 해주면 -> dp[6][0] dp[4]에서 1로 끝난거에 ..

    [Python/파이썬 13549 백준] 숨바꼭질 3

    www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 bfs문제입니다. 2*x, x-1, x+1인 경우에서 2*x 인 경우 : 순간이동하므로 시간 +0, appendleft해서 가장 우선순위로 설정하여 1000001까지 최단시간 미리 구해줌 x-1,x+1인 경우 : +1씩 더해줌 풀면서 시간초과 났었는데 apppendleft를 안써주고 if문으로 하나하나씩 정의해줘서 시간초과났음... import sys from collec..

    [Python/파이썬 3055 백준] 탈출

    www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 풀이 bfs 문제인데 물의 경로가 고슴도치에 영향을 주는 문제 처음 물(*)을 bfs 돌려서 check_water에 시간을 넣어줬습니다. 이 과정에서 물이 여러 개인 경우랑 두번째 물 bfs 일 경우 시간이 더 적게 걸리는 상황으로 걸러줬습니다. 다음 고슴도치(S) bfs 돌려서 물이 아예 없을 경우와 물보다 빨리 고슴도치가 움직인 경우를 걸러줬습니다. 제출과정에서 계속 10%에서 불통됐는데 반례가 D.. ... ..S 이..

    [Python/파이썬 4963 백준] 섬의 개수

    풀이 일반적인 bfs 문제인데 대각선만 추가됐습니다. bfs 돌때마다 cnt+=1 씩해줬습니다. import sys from collections import deque input=sys.stdin.readline queue=deque() dx=[0,0,1,-1, 1,1,-1,-1] dy=[1,-1,0,0, 1,-1,1,-1] def bfs(x,y): check[x][y]=True queue.append((x,y)) while queue: x,y=queue.popleft() for i in range(8): nx=x+dx[i] ny=y+dy[i] if 0

    [Python/파이썬 11724 백준] 연결 요소의 개수

    www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 풀이 처음에 연결요소를 몰라서 구글링한 결과 그냥 이어진 덩어리를 말하는거 였네요. 간선으로 이어졌으면 한 덩어리입니다. 그래서 이 문제는 dfs나 bfs로 0~n 점까지 bfs를 써서 이어진 모든 점들을 구해주고 방문한 점은 check를 True로 하여 몇번 bfs 돌렸는지 갯수를 셌습니다! # 연결 요소의 개수 import sys from col..

    [Python/파이썬 15665 백준] N과 M(11)

    www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수..

    [Python/파이썬 15652 백준] N과 M(4)

    www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 itertools 쓴거 엄청 쉽네용 import sys from itertools import combinations_with_replacement input=sys.stdin.readline n,m=map(int,input().split()) lst=[i for i in range(1,n+1)] lst=list(combinations_with_replacement(lst,m)) for i in lst:..