본문 바로가기

전체 글275

[프로그래머스] 2019 카카오 공채 - 실패율 (파이썬) 문제 및 풀이 문제) 프로그래머스 - 2019 카카오 공채 - 실패율-> 코딩테스트 연습 - 실패율 | 프로그래머스 (programmers.co.kr)코딩테스트 연습 - 실패율실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스programmers.co.kr ① 나의 풀이관찰을 하다 보면 플레이어가 도달한 스테이지( j )와 해당 스테이지( i )를 비교하여 실패율을 계산하여 실패율과 해당 스테이지를 result 리스트에 넣어준다. 플레이어가 도달한 스테이지가 해당 스테이지보다 높은 경우( j > i ): 플레이어는 스테이지에 도달했고 성공한 경우이므로 participant만 1을 늘린.. 2021. 3. 4.
[프로그래머스] 2019 카카오 공채 - 오픈채팅방 (파이썬) 문제 및 풀이 문제) 프로그래머스 - 2019 카카오 공채 - 오픈채팅방 -> 코딩테스트 연습 - 오픈채팅방 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr ① 나의 풀이 Dictionary 형태로 record의 유저 아이디와 닉네임을 취합하기 위해서 collections의 Counter 모듈을 이용하자. 각 record의 원소를 split 하여 order 리스트로 받아준다. record탐색을 두 번 해주는데, 첫 탐색에서 유저 아이디에 대한 최종 닉네임을 결정해주고 두 .. 2021. 3. 4.
[백준] 1904번 - 01타일 (C++/파이썬) 문제 및 풀이 문제) 백준 - 동적 계획법 1(Dynamic programming)- 01타일 -> www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net dp 가능한 숫자 dp[1] 1 dp[2] 11 00 dp[3] 111 001 100 dp[4] 1111 0011 1001 1100 0000 ... dp[n] dp[n - 1] ... dp[n - 2] n을 숫자의 길이, dp[n]에 해당하는 값을 가능한 숫자의 개수라 하자. '00' 타일과 '1' 타일을 붙이는데 별 다른 제약 조.. 2021. 3. 4.
[백준] 14502번 - 연구소 (파이썬) 문제 및 풀이 문제) 백준 - 너비 우선 탐색(BFS) - 연구소 - 14502번: 연구소 (acmicpc.net) 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 벽과 바이러스가 아닌 모든 지역(space)을 탐색해 벽의 후보(wall_candidates)를 골라 준다. combinations를 이용해 조합을 만들어주고 원본을 유지하기 위해 deepcopy를 이용해 복사 후 벽을 세워 bfs로 탐색해준다. 그 후 각 조합마다 안전 지역 개수의 최댓값을 구한다. 완전 탐색으로 접근하면 쉽게 풀리는 문제이지만 처음에 그리디하게 접근해서 헤.. 2021. 3. 3.
[백준] 11053번 - 가장 긴 증가하는 부분 수열 (파이썬) 문제) 백준 - 동적 계획법 (Dynamic programming) - 가장 긴 증가하는 부분 수열 -> www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 각 숫자로 만들 수 있는 가장 긴 증가하는 부분 수열의 길이를 저장할 length 리스트를 선언한다. 각 숫자(i)들을 차례대로 순회(0 ~ n)하면서 해당 숫자(i)보다 작고 가장 긴 증가하는 부분 수열을 찾아 그 길이에서 1을.. 2021. 3. 2.
[백준] 2206번 - 벽 부수고 이동하기 (파이썬) 문제) 백준 - 너비 우선 탐색 - 벽 부수고 이동하기 -> www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 좌표와 벽 부수는 게 가능한지에 대한 여부를 포함하는 index를 가진 3차원 dist 리스트를 선언한다. dist[1][3][1] = 1이라는 것은 2행 4열에서 벽을 1개 부실수 있고 거리가 1이라는 것이다. 이렇게 리스트를 설정했다면 bfs()를 통해 최단거리를 탐색하면서 (n - 1)행 (m - 1)열 일 때 해당하는 .. 2021. 3. 1.
[Python] sort( ), sorted( ), lambda ⊙list.sort() 1. 따로 반환하는 값이 없으므로(None) 새로운 변수 선언이 필요 없다. 2. '리스트명.sort()'와 같은 방법으로 작성한다. 3. key parameter가 None으로 설정되어 있으므로, 문자열 리스트를 문자 길이 순으로 정렬하고 싶다면 list.sort(key=len)으로 작성한다. a = [3, 2, 5, 1, 4] a.sort() print(a) #[1, 2, 3, 4, 5] ⊙sorted(list) 1. 기존에 선언된 리스트 원본을 변화시키지 않는다. 2. 순서대로 정렬한 리스트를 반환하므로 새로운 변수를 선언해야 한다. 3. 'newList = sorted(list)'와 같은 방법으로 작성한다. a = [3, 2, 5, 1, 4] b = sorted(a) pri.. 2021. 2. 27.
[백준] 1043번 - 거짓말 (파이썬) 문제) 백준 - 분리 집합 - 거짓말 -> www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 분리 집합 문제이므로 set() 자료형을 사용하자. 진실을 아는 사람(witness_set)의 번호와 각 party마다(parties) 참가자들을 집합 자료형으로 입력받는다. 각 파티들을 순회하면서 witness_set와 party의 교집합(intersection)이 존재하면 party의 모든 참가자들을 witness에 추가한다. 교집합이 존재하지 않을 경우 과장된 이야기를 할 .. 2021. 2. 24.
[백준] 1068번 - 트리 (파이썬) 문제) 백준 - 그래프 이론/트리 - 트리 -> www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 1. 인접 행렬 방식으로 graph를 False로 초기화한다. 2. 입력으로 들어온 부모 노드들의 정보를 이용해 graph의 연결을 채워주고 root를 선정한다. 3. 세 번째 줄 입력에 나오는 지울 노드의 모든 연결을 끊어준다.(False로 설정) 4. dfs로 root부터 탐색해 리프 노드 개수를 구해준다. 반성) 트리 문제라 생각해서 인접 행렬의 활용과.. 2021. 2. 20.
[백준] 11051번 - 이항 계수 2 (C++ / 파이썬) 문제 및 풀이 문제) 백준 - 동적 계획법 (Dynamic programming) - 이항 계수 2 -> www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 주어지는 N과 K가 최대 1000이므로 기본 조합 공식으로 팩토리얼로 구한다면 시간 초과가 날 것이다. 따라서 우리는 동적 계획법을 이용하여 시간을 줄일 것이다. 고등학교 수학 시간에 조합 관련 개념에서 우리는 다음과 같은 수식을 배웠다. (기억이 안난다면, 지금 알아 놓도록 하자.) 이 식을 이용해 우리는 동적 계획법의 수열을 쉽게 새울 수 있다. 우리가 구할 값을 dp[n][k]라 했을 .. 2021. 2. 20.
[TensorFlow] 시퀀스 API를 사용하여 이미지 분류기 만들기 (2) 이전 글) 시퀀스 API를 사용하여 이미지 분류기 만들기 (1) 2021/02/02 - [Deep learning - TensorFlow] - [TensorFlow] 시퀀스 API를 사용하여 이미지 분류기 만들기 (1) [TensorFlow] 시퀀스 API를 사용하여 이미지 분류기 만들기 (1) ⊙ 케라스를 사용하여 데이터셋 적재하기 MNIST 데이터셋은 고등학생과 미국 인구 조사국 직원들이 손으로 쓴 70,000개의 작은 숫자 이미지를 모은 데이터이다. 각 이미지에는 어떤 숫자를 나타내 chocochip101.tistory.com 이어서 이미지 분류기 만들기 두 번째. 이번에는 모델을 컴파일해보고 새로운 샘플에 대하여 예측을 시행해 보겠다. ⊙ 모델 컴파일 compile() 메서드를 이용하여 손실 함수.. 2021. 2. 20.
[백준] 2293번 - 동전 1 (파이썬) 문제) 백준 - 동적 계획법 (Dynamic programming) - 동전 1 -> www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 주어진 동전들을 이용해서 k원을 만드는 방법의 수를 구하는 것이다. 아래 을 보자. dp[k]를 만들 수 있는 경우의 수라 하자. i(화폐가치)가 1일 때 dp[5] = dp[4]이다. 엄밀히 말하면, 현재 dp[5] 값이 0이기 때문에 dp[5] = dp[5] + dp[4]라 볼 수 있다. i(화폐가치)가 2일 때 dp[5] .. 2021. 2. 11.
[백준] 10942번 - 팰린드롬? (파이썬/C++) 문제) 백준 - 동적 계획법 (Dynamic programming) - 팰린드롬? -> www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net dp를 n x n의 2차원 배열로 선언한다. 예를 들어 리스트의 인덱스에 대해 1부터 3까지 팰린드롬이라면, dp[1][3] = True로 설정한다. 즉, 부분 리스트 인덱스의 시작 start와 인덱스의 끝 end를 이용해 검사해 팰린드롬일 경우 dp[start][end]를 True, 아닐 경우 False로 정한다. 팰린드롬의 검사는 검사하려는 부분 리스트의 내부.. 2021. 2. 9.
[프로그래머스] 2021 카카오 공채 - 메뉴 리뉴얼 (파이썬) 문제 및 풀이 문제) 프로그래머스 - 2021 카카오 공채 - 메뉴 리뉴얼 -> programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr ① 나의 풀이 orders 배열에 저장된 단품 메뉴에서 코스 메뉴로 정할 수 있는 모든 조합을 구한다. 이때, 조합을 구해 그 조합의 길이가 course 배열에 들어 있다면 딕셔너리(possible)에 추가한다. 딕셔너리에서 우리는 코스 메뉴의 길이별로 최대를 구해야 한다. 따라서 배열의 인덱스를 course의 .. 2021. 2. 6.
[백준] 1195번 - 킥다운 (파이썬) 문제 및 풀이 문제) 백준 - 구현(Implementation) - 킥다운 -> www.acmicpc.net/problem/1195 1195번: 킥다운 첫 줄에는 첫 번째 기어 파트를 나타내는 1과 2로 구성된 문자열이 주어진다. 두 번째 줄에는 마찬가지로 두 번째 기어 파트를 나타내는 1, 2로 구성된 문자열이 주어진다. 여기서 1은 홈을, 2는 www.acmicpc.net 입력 첫 줄에는 첫 번째 기어 파트, 두 번째 줄에는 두 번째 기어 파트가 1,2로 구성된 문자열이 주어진다. 1은 홈(들어간 부분), 2는 이(튀어나온 부분)를 의미한다. 먼저 너비를 구하기 전에 어떤 경우에 기어가 맞물릴 수 있는지 알아보자. ①: 짧은 기어 파트가 1이고 긴 기어 파트가 2일 때, 서로 맞물려 기어를 끼울 수 있다. ②: 긴.. 2021. 2. 3.
반응형