단기간 알고리즘 역량을 향상 시키는 방법 1. 많은 문제의 대표 유형을 숙지 ( 배경지식) 2. 다양한 문제를 어떤 기법으로 푸는지 아는것 (문제해결력) 3. 계산을 여러번 해본다 (구현력)
알고리즘 공부할 때Part 02를 이해한다.Part 03 관련 문제를 푼다.백준 온라인 저지에서 관련 문제 50개를 푼다. 백준 온라인 저지 : 삼성 SW 역량테스트 대비 문제집 제공프로그래머스 : 카카오 공채 문제집 제공삼성전자 : DFS/BFS를 활용해야 하는 탐색
탐욕적 : 현재 상황에서 지금 당장 좋은 것만 고르는 방법그리디 알고리즘 자체가 문제 출제의 폭이 매우 넓기 때문에, 다익스트라 알고리즘과 같은 특이 케이스를 제외하고는 단순 암기를 통해 모든 문제를 대처하기 어렵다.특정한 문제를 만났을 때 단순히 현재 상황에서 가장
현재 상황에서 가장 좋아 보이는 것만을 선택하는 알고리즘'현재 상황에서 특정한 기준에 따라 가장 좋아 보이는 것만을 선택' 해서 최적의 해를 구해야한다. 코딩 테스트에서는 대부분 '최적의 해'를 찾는 문제가 출제되기 때문에 그리디 알고리즘의 정당성을 고민하면서 문제 해
코팅 테스트에서 구현이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.프로그래밍 언어의 문법을 정확히 알고 있어야 하며 문제의 요구사항에 어긋나지 않는 답안 코드를 실수 없이 작성해야 한다.구현 유형의 문제풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문
구현 : 머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하는 과정구현 능력이 요구되는 대표적인 알고리즘 문제 유형으로 완점 탐색과 시뮬레이션이 있다.완전 탐색 : 모든 경우의 수를 빠짐없이 다 계산하는 해결 방법을 의미dfs, bfs 알고리즘을 이용해서 문제
그래프를 탐색하기 위한 대표적인 두 가지 알고리즘탐색 : 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다.자료구조 : 데이터를 표현하고 관리하고 처리하기 위한 구조삽입(Push) : 데이터를 삽입한다
탐색 : 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 한다.자료구조 : 데이터를 표현하고 처리하는 방법스택 : 선입후출 구조 또는 후입선출 구조큐 : 선입선출 구조dfs : 깊이 우선 탐색, 그래프를 탐색하는 알고리즘, 최대한 멀리 있는 노드를 우선으로 탐색하
데이터를 특정한 기준에 따라서 순서대로 나열정렬 알고리즘은 프로그램을 작성할 때 가장 많이 사용되는 알고리즘 중 하나다.정렬 알고리즘으로 데이터를 정렬하면 이진 탐색이 가능해진다.정렬 알고리즘을 공부하다 보면 자연스럽게 알고리즘 효율의 중요성을 깨닫는다.정렬 알고리즘
정렬 알고리즘 동작 아이디어|정렬 알고리즘|핵심 아이디어|\|-\|-\||선택 정렬|가장 작은 데이터를 '선택'해서 정렬되지 않은 데이터 중에서 가장 앞쪽에 있는 데이터와 위치를 바꾸는 방법이다.||삽입 정렬|데이터를 앞에서부터 하나씩 확인하며 데이터를 적절한 위치에
범위를 반씩 좁혀가는 탐색순차 탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법(보통 정렬되지 않은 리스트에서 데이터를 찾아야할 때 사용한다.)리스트의 데이터에 하나씩 방문하며 특정한 문자열과 같은지 검사하므로 구현
문제 풀이 이해이 문제는 이진 탐색을 이용해서 간결하게 해결할 수 있다.각 단어를 길이를 길이에 따라 나눈다.이후에 모든 리스트를 정렬한 뒤에, 각 쿼리에 대해서 이진 탐색을 수행하여 문제를 해결할 수 있다. ex)단어 : 'frodo', 'front', 'frost'
한 번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘다이나믹 프로그래밍, 동적 계획법 : 메모리 공간을 약간 더 사용하면 연산 속도를 비약적으로 증가시킬 수 있는 방법다이나믹 프로그래밍 과 동적 할당의 다이나믹은 다른 의미이다.다이나믹 : '프로그램이 실행되는 도중
한 번 해결된 부분 문제의 정답을 메모리에 기록하여, 한 번 계산한 답은 다시 계산하지 않도록 하는 문제 해결 기법이다.다이나믹 프로그래밍은 점화식을 그대로 코드로 옮겨서 구현할 수 있다.점화식 : 인접한 항들 사이의 관계식을 의미한다. 다이나믹 프로그래밍은 그 자체로
최단 경로(Shortest Path) 알고리즘가장 짧은 경로를 찾는 알고리즘, '길 찾기' 문제다양한 종류가 있는데, 상황에 맞는 효율적인 알고리즘이 이미 정립되어 있다. 그래프노드 : 각 지점간선 : 지점 간 연결된 도로1 최단 경로 알고리즘다익스트라 최단 경로 알고
그래프상에서 가장 짧은 경로를 찾는 알고리즘 '단계마다 방문하지 않은 노드 중에서 최단 거리가 짧은 노드를 선택' 한 뒤에, 그 노드를 거쳐 가는 경우를 확인하여 최단 거리를 갱신하는 방법우선순위 큐를 이용하여 소스코드를 작성할 수 있다. 다이나믹 프로그래밍을 이용하여
5장 DFS/BFS 와 9장 '최단 경로'에서 다룬 내용은 모두 그래프 알고리즘으 한 유형으로 볼 수 있다.크루스칼 알고리즘(Kruskal Algorithm) : 그리디 알고리즘으로 분류된다.위상 정렬 알고리즘(Topology Algorithm) : 큐 자료 구조 혹은
합분해 헷갈림에 블로그를 참고하였습니다.설명 매우 잘되어 있어서 이글을 읽으시면 100% 이해 됩니다!➡️ https://hongjw1938.tistory.com/63
파도반 수열 클릭
계단 오르기 해결나 같은 경우 도착을 기준으로 시작점 reverse(역 방향)으로 2차원 배열로 진행하였다.상위권에 있는 코드에서는 일차원 배열을 이용하여 구현하였다. 나의 소스 상위권 소스참고 주소 결과상위권 소스를 따라 해보았지만, 이상하게 시간이 더 나온것 같다.
연속합
가장 긴 감소하는 부분 수열 위 문제와 비슷
백준 사이트 : 암호 코드 최근 푼 dp 문제 중에서 점화식 구하는 데에 있어 가장 어려웠던 것 같다.예외 케이스를 잘 찾아야 한다.배열로 처리한다.dp 인덱스 i 번째를 찾을 때, i - 1, i - 2를 이용한다. 💡 문제는 두 가지 경우의 수가 존재한다.idx
카드 구매하기 채점 결과
가장 큰 증가 부분 수열 11053과 거의 비슷한 문제
가장 긴 증가하는 부분 수열 dpi의 값을 1로 초기화현재 위치보다 이전에 있는 원소의 값이 작은지 확인한다. (크거나 같으면 가장 긴 증가하는 부분 수열이 될 수 없다.)작다면, 현재 위치의 이전 숫자 중, dp값에 + 1을 하여 현재 위치 dp 값과 비교한다.그 중
포도주 시식 참고 소스 참고 주소 : https://hongcoding.tistory.com/48
스티커 내가 푼 소스 상위권 효율적인 코드참고 : https://pacific-ocean.tistory.com/197 일단 양 옆의 숫자는 선택할 수 없다는 것을 인지하고 있어야 한다.1번 인덱스에는 왼쪽 대각선의 숫자를 더할 수 있다.2번째 인덱스부터는 이때
이친수 idx번째는 idx - 1와 idx - 2 번째 더한 값 결과
오르막 수기존 나의 코드 상위권 효율적인 코드참고 https://www.acmicpc.net/source/16076606 결과규칙을 잡아 DP를 이용하니 for문 2개로 해결되었다.시간이 대략 12ms 차이난다.
쉬운 계단 수기존 나의 코드 상위권 효율적인 코드➡️ https://www.acmicpc.net/source/17767811
1, 2, 3 더하기
2xn 타일링 2
2 x n 타일링 현재 n번째일 때, dp\[n] = dp\[n - 1] + dp\[n - 2] 이다.배열을 사용하니 런타임 에러가 발생하여, 변수만 이용하였다. 소스
1로 만들기 그리디 알고리즘 : 내가 생각한 최적의 방법이 처음부터 끝까지 반례 없이 적용이 되는 경우동적 계획법 : 가능성을 모두 두고 그 안에서 최솟값을 찾기 먼저 1을 더해준다. (이유는 먼저 더해도 어차피, 그 값이 2와 3으로 나누어지면 나누어진 값 중 최소
수 정렬하기 2
좌표 정렬하기 실행 결과
좌표 정렬하기 2 실행 결과
나이순 정렬 실행 결과
수 정렬하기 3 실행 결과
카드 카드 문제를 풀면서 알게 된 내용으로,python에서는 이와 같이 광범위한 범위 문제 풀 때는 왠만하면 딕셔너리를 이용하자.딕셔너리는 key와 value를 넣어주면 되며, 호출할 때 배열의 인덱스에는 key를, 값으로는 value를 주면 된다.➡️ card\[2]
K번째 수 데이터 개수가 500만이다.광범위한 데이터, 시간 복잡도를 고려하는 정렬 알고리즘을 이용해야 한다. (PyPy3)O(NlogN) sort 정렬 함수를 사용하면 된다. 실행 결과
최대공약수 채점 결과
조합 0의 개수 조합식 : nCr = n! / (n-m)!r!끝자리 0의 개수를 출력한다.조합식을 보면 분모에는 : n!분자에는 : (n-m)!, r!가 있다.➡ 그러므로 0의 개수는 분자에 있는 0의 개수에서 분모에 있는 0의 개수를 빼주면 된다. (100/10 =>
요세푸스 문제 2 문제가 상당히 복잡하다.참고자료 를 보고 이해를 하면 될듯 하다!세그먼트 트리 또한 공부하자!세그먼트 트리 채점 결과 참고https://mangu.tistory.com/68
Base Conversion 제곱함수와 for문의 역함수를 잘 활용하면 코드가 간단해진다. (for문 역함수 출력방법 알게됨) 실행 결과
그래프 dfs : 깊이 우선 탐색bfs : 너비 우선 탐색 채점 결과
연결 요소의 개수 연결 요소 : 나누어지 각각의 그래프를 연결 요소라고 한다.dfs와 bfs 두 개중 어떠한 것을 사용하든 풀리는 문제이다.그럴 경우 bfs를 사용하자! (너비 우선 탐색이 시간이 덜 걸린다.)이와 같이 정점의 최대치가 나온 경우는 2차원 배열에서 각
이분 그래프 dfs, bfs 동시에 사용 가능할 때는 bfs를 사용하는 것이 좋다.✔️ 문제 푸는 팁먼저 이분 그래프란 무엇인가 하면서로 인접한 정점이 같은 색이면 이분 그래프가 아니다.사이클이 형성되면 안된다.이분 그래프 특징 설명 잘되어 있는 곳 이 문제는 전형적인
반복수열 반복 수열이 되는 위치를 찾아야 한다. (그 위치전 인덱스가 마지막으로 반복되지 않는 구간이 된다.)반복된 구간이 보일 때, 배열에 넣지 않고 나간 후, 처음으로 이 반복된 값이 들어온 인덱스를 출력해준다.(반복 시작점의 인덱스가 반복되는 부분을 제외했을 때의
텀 프로젝트 파이썬에서 색다른 점들을 공부했다.학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는 경우나, s1이 s2를 선택하고, s2가 s3를 선택하고,..., sr-1이 sr을 선택하고, sr이 s1을 선택하는 경우에만 한 팀이
단지번호붙이기 그래프(백트래킹) 문제이다.일종의 트리 탐색 알고리즘이다. 다만, dfs/bfs 어떤게 더 빠를까?백트래킹 - 나무위키 에 따르면🔔 DFS와 BFS 언제 사용될까?(1) DFS를 써야할 때모든 경우의 수를 고려해야 하는 문제라면, DFS를 사용한다.BF
섬의 개수 기존 dfs/bfs 문제와 유사하다.다만, 갈 수 있는 방향이 4가지 추가되었다. dfs 실행 결과 bfs 실행 결과 모든 경우의 수를 고려해야하므로 dfs가 더 빠르다!
트리 순회 문제는 전형적인 트리 순회 알고리즘 문제이다.전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal) 만약, 전위, 중위, 후위에 대해 모른다면전위, 중위, 후위 설명이를
토마토 최단 거리 구하는 문제에서는 bfs를 사용한다!bfs의 대표적인 문제에서 몇 가지 추가된 점들이 있다.시작하기에 앞서 그래프에서 익은 토마토가 어디인지 먼저 위치를 찾고 저장해야 한다. (따로 할시, 원하는 결과를 얻을 수 없다. 더 빨리 토마토를 익을 수 있는
미로 탐색 최소칸의 수를 구해야한다.최단 거리를 구할 때는 bfs를 사용해야 한다.점들을 지날 때마다 +1을 해줌으로써 '여기는 지났습니다.'라고 표시해주어야한다!좌우위아래 좌표로 구해야한다. 실행 결과
다리 만들기 출력을 보면 가장 짧은 다리의 길이를 출력한다. ➡️ bfs를 사용해라!전체적으로 돌면서 육지 구간을 나누어야 한다.육지구간 표시를 하자!bfs를 돌리면서 연결되어 있는 구간마다 숫자를 주는 것이다. ➡️ 1번 공간이면 1, 2번 공간이면 2, 3번 공간이
트리의 부모 찾기 문제를 보면 부모노드부터 자식노드까지 전체를 연결해야한다.연결할 때, 1번 노드부터 시작하여 돌리다가 아직 방문하지 않은 노드이라면 그 노드와 연결한다.연결될 때 부모노드가 누구인지 저장해놓는다.dfs, bfs두 개 다가능하다. dfs bfs 채점 결
트리의 지름 처음 접해보는 문제였다.트리의 지름을 구하는 방법 증명 과정 참고설명 잘되어 있다!트리가 입력으로 주어진다.📣 트리의 지름 구하기 공식(1) 루트 노드에서 가장 먼 노드를 찾는다. (가장 먼 노드 : a)(2) a에서 가장 먼 노드를 찾는다. (a에서 가
트리의 지름 📣 트리의 지름 구하기 공식(1) 시작 노드에서 가장 먼 노드를 찾는다. (가장 먼 노드 : a)(2) a에서 가장 먼 노드를 찾는다. (a에서 가장 먼 노드 : b)(3) a - b가 트리의 지름이 된다.1167문제와 거의 유사한 문제지만, 시작 노드가
나무 자르기 벌목나무, 벌목 높이를 움직여 필요 나무 길이를 채우는지 보는 것!1) 가장 짧은 길이 1을 start로, 나무 중 가장 긴 길이를 end로 둔다.2) 이분탐색이 끝날 때까지 while 문을 돌린다.3) mid를 start와 end의 중간으로 두고, 모든
랜선 자르기 워낙 설명이 잘되어 있는 곳 : 참고자료 를 읽어보면 문제를 어떻게 풀어야할지 이해가 된다. 채점 결과
공유기 설치 이분탐색 문제이다.다만, 문제 이해하는데 시간이 많이 걸린 것 같다.공유기 설치 길이를 움직이며(이분 탐색을 한다.) 적절한 집에 설치가 가능한지 살펴보는 문제이다!(1) 첫 집을 start, 첫 집과 끝 집 거리를 end로 둔다.(2) 첫 집과 끝 집 이
숫자 카드 이분 탐색을 진행해서 출력하면 정답처리가 된다.딕셔너리를 사용해도 되지만 쉬운 방법을 택하였다.소스를 보면 쉽게 이해가 될 것이다. 채점 결과
숫자 카드 2 숫자 카드 1 문제와 거의 유사한 문제이다.갯수를 세어주는 코드를 이용하면 된다.collections의 Counter를 사용하면 된다.Counter는 딕셔너리 형식으로 배열에 있는 값이 key값이 되고 갯수가 value가 된다.이외는 코드를 보면 쉽게 이
민호와 강호 수학적 공식을 이해 및 적용하는데 시간이 많이 걸리는 것 같다.(빠르게 패스)문제 설명 참고하기
배열 합치기 sort() 메서드를 이용하면 된다. 채점 결과
종이의 개수 종이의 개수 문제는 dfs를 이용하면 풀 수 있다.만약 반복문을 돌리다가 시작점과 해당 위치 구간 값이 다르다면 확인해야하는 공간이다.9 구간을 확인해야 하므로 반복문을 돌리면서 재귀 호출을 한다. 9구간 마다 확인해야한다. 채점 결과 참고https&#
하노이 탑 이동 순서 ✔️ 하노이탑 규칙1, 2, 3 탑이 있고 탑의 개수만큼 원판이 있을 때(1) 작은 원반 n - 1개를 A에서 B로 이동한다.(2) 큰 원반 1개를 A에서 C로 이동한다.(3) 작은 원반 n - 1개를 B에서 C로 이동한다.이와 같이 진행된다.
쿼드트리 왼쪽 위 : 1번오른쪽 위 : 2번왼쪽 아래 : 3번오른쪽 아래 : 4번(0, 0) 좌표부터 시작한다.전체 4등분을 해서 1번부터 확인한다.그 구간 전체가 모두 1로만 되어 있으면 압축 결과 1 을 출력그 구간 전체가 모두 0로만 되어 있으면 압축 결과 0을
별 찍기 - 10 재귀적인 패턴으로 별을 찍는다.평소에는 반복문 위주로 사용하여, 이번 문제는 재귀를 이용하여 풀었다.설명 잘되어 있는 블로그현재 n = 3^i일 때, 가운데를 제외한 나머지는 n = 3^(i-1)이다.n이 3^i일 때➡️ \* : 3^(i - 1)이다
별 찍기 - 11 위 별의 모양이 반복해서 출력된 것을 확인할 수 있다.문제에 나와있는 공식에 따르면 (N = 3 x 2^k)라고 한다.k가 1일 때는 위 별의 모양이 2개가 추가 되는 것이고k가 2일 때는 k가 1일 때 모양을 2개 추가한 것을 알 수 있다.이와 같이
버블 소트 분할 정복 푼 문제중에 가장 어려웠다.보니까 플레티넘 문제다.포기하고 소스를 참고하였다.참고자료그 다음 문제 2261 - 가장 가까운 두 점은 플레티넘 2 문제라서 포기했다. 참고 : https://cantcoding.tistory.com/33
수 묶기 나 같은 경우, 모든 경우의 수를 조건식으로 처리했으나 이는 좋지 않은 방법이라는 것을 알게 되었다. ✔️ 좋은 해결책으로음수는 오름차순 정렬, 양수는 내림차순 정렬, 1은 곱하기 대신 더하는 방식(0은 음수에 속하게 된다.)0과 음수의 개수 합이 홀수라면 제
동전 0 그리디 알고리즘의 기초다음 차례는 이전 차례의 배수 채점 결과
대화 or 인턴 브론즈 문제이지만, 약간 생각을 해야한다고 생각한다.조건처리하는데, 생각을 많이 한 것 같다. 채점 결과
30 섞어서 30의 배수가 되는 가장 큰 수를 만들면 된다.30의 배수는 곧 끝자리가 0이고, n번째 자리부터 십의 자리까지는 3의 배수이다.그리고, n이 3의 배수인지 확인하기 위해서는 각자리 수를 모두 더했을 때 3의 배수여야 한다. 채점 결과
병든 나이트 규칙이 있는데세로가 1일 때는 1세로가 2일 때는 2번째(1칸 위로, 2칸 오른쪽), 3번째(1칸 아래로, 2칸 오른쪽) 밖에 사용하지 못한다.그러므로, 이동 횟수가 최대 4이다. 오른쪽으로 2만큼이므로min(4, m+1)이 된다. (예를 들어, m이 3이
회의실 배정 (1) 끝나는 시간의 오름차순(2) 시작하는 시간의 오름차순설명 잘되어 있는 곳워낙 설명이 잘되어 있어 참고하면 될 것 같다. 채점 결과
ATM (1)정렬 후현재 합, 전체 총합을 각각 구하여 계산한다.(2)정렬 후1번째 수는 n번 더해지고, 2번째 수는 n-1번 더해지고 ~ n번째 수는 1번 더해진다. (1) (2) 채점 결과결과를 보면 위에 (2), 밑에 (1) 채점 결과
직사각형으로 나누기✔️ (1, 1)부터 (n, m)까지 각 자리의 총합각 자리 총합(1,1) ~ (2, 2)까지 총합이라고 했을 때 (2, 2) = (1, 2) + (2, 1) - (1, 1)→ 왜 (1, 1)을 빼는가? (1, 2)와 (2, 1)에 (1, 1)이 2번
외판원 순회 2 한 도시에서 출발 해 N개의 도시를 모두 거쳐서 다시 원래 도시로 돌아오는 순회 ➡️ 깊이 우선 탐색을 사용한다.최소 비용을 매 회차마다 찾는다.만약 최소 비용보다 현재 비용이 더 높게 나온다면 이는 종료해야한다. 채점 결과
소수 경로 이 문제는 에라토스테네스의 체를 이용한 후, bfs를 이용하여 문제를 풀면된다.파이썬에서는 문자열합칠 때는 +를 이용하면 쉽게 합칠 수 있다.temp = int(strNow\[:i] + str(j) + strNow\[i + 1:])다만, 이 문제에서 불가능한
DSLR 너비 우선 탐색으로 모든 노드를 방문하다가 b를 찾았다면, 종료하면 된다.(1) D : n은 2배로 나눈다. (10,000보다 큰 경우, 10000으로 나눈 나머지) → 현재숫자 \* 2 % 10000(2) S : n에서 1을 뺀다. (0인 경우, 9999로)
퍼즐 인덱스 → 행과열 : 행은 인덱스 // 3, 열은 인덱스 % 3행과열 → 인덱스 : 인덱스는 행 \* 3 + 열 💡 참고sys.stdin.readline을 이용할 때, 하나의 단어로 사용하고 싶으면 read=sys.stdin.readline 이 후, read를
물통 만약, 이 문제가 어떻게 되었는지 이해가 되지 않는다면이 예시를 보기를 바란다! (나또한 처음 문제를 볼 때 이해가 안되서 자료를 찾게 되었다.)위를 보고 아~ 그렇구나 생각이 들면 다시 문제 풀러 고고 이제 문제를 어떻게 풀면 되는지 적어보려고 한다.bru
리모컨 아 이문제 브루트포스 어떻게 경우의 수를 구현해야할지 감이 오지 않아 검색을 하였다.1번 케이스 : 현재채널(100)에서 그냥 희망 채널까지 +-버튼으로 이동했을 때 횟수2번 케이스 : 모든 채널을 순회하면서 해당 채널에서 희망채널까지 +- 버튼으로 이동했을 때
숨바꼭질 현재 점 : N을 기준으로 동생 점 : K로 가면 된다.next_n = N (+- 1) or (\*2)next_n이 K에 도착하면 몇 초인지 출력하면 된다.이는 bfs로 시작 점을 기준으로 탐색을 진행하며, 동생의 점에 도착했을 때 바로 종료하면 된다. (작은
차이를 최대로 파이썬을 사용할 시, 순열과 조합을 라이브러리에서 호출하여 결과를 받을 수 있다.문제에서 크기가 작으므로 조합함수 permutations을 이용하여 모든 경우의 수를 돌리면서, 가장 거리 계산이 큰 것을 답을 출력하면 된다. 채점 결과
문자판 n, m 크기의 문자판이 주어지며, 경로의 개수를 구하는 문제이다.직사각형과 경로가 등장했다.이는 깊이 우선 탐색, 너비 우선 탐색으로 풀 수 있는 문제라는 것이다.보통 우선 탐색 문제들은 좌표안에서 지나갈 수 있는 경로를 구할 때 많이 사용된다. 📌 주의점출
로고 내가 푼 완전 탐색 중에서 가장 어려웠다고 생각한다.1시간 정도 보다가 이해가 안되서 바로 검색했다!설명 잘되어 있는 곳↑ 여기 설명 진짜 잘되어 있다.어떤 경우의 수에 체크해야할지 잘 나와있다.근데 위와 똑같이 python으로 제출 할 경우 런타임 에러가 발생한
스타트링크 이번 문제는 전형적인 너비 우선 탐색 문제이다.이와 같이 총 길이가 나와 있고, 시작점과 도착점 그리고 증가와 감소가 나와있을 경우 너비 우선 탐색을 사용하면 된다.다만, 나도 이것 때문에 틀렸었는데무조건 경우의 수가 존재하지 않는다고 use the stai
암호 만들기 (1) backtracking을 사용해야하는 문제이다.이유로는 a ->c -> i -> s (o), a -> i -> c -> s (x)이와 같이 현재 방문한 알파벳이 이전 알파벳 보다 우선순위가 높으면 결과에 반영하면 안되는 걸 체크 해야한다.또한, 너비
스도쿠 ✏️ 스도쿠 규칙빈공간에 값을 넣기(1) 가로로 빈공간에 넣을 수 있는 숫자 찾기(2) 세로로 빈공간에 넣을 수 있는 숫자 찾기(3) 1, 4, 7 번째 인덱스에서 3x3으로 넣을 수 있는 숫자 찾기처음에는 문제를 보고 어떻게 규칙을 넣을 수 있을까?라는 생각에
알파벳 문제를 보자마자, 쉽구나 라는 생각에 바로, dfs를 이용하여 제출하였다.❌ 사용했던 것딕셔너리 라이브러리를 사용해서 방문했는지 체크했다.결과... 시간 초과 이해가 안되서 질문들을 보니, 나와 같은 사람이 많다는 것을 알게 되었다.검색을 해보니, 알파벳 크기는
로또 dfs의 전형적인 문제다!그런데? 파이썬에서는 순열과 조합 라이브러리가 있다. 시간 복잡도도 라이브러리로 코드 작성할 시 좋은 결과물을 받을 수 있다.파이썬의 조합 라이브러리 combinations
부분수열의 합 부분 수열의 합을 구하는 문제이다.이와 같은 문제를 만났을 때는 순열 조합을 사용하면 된다.dfs를 사용하면 된다. 순열 조합 dfs1 dfs2 결과를 보면 순열 조합이 dfs1보다 시간이 더 좋게 나온다.다만, dfs2와 같이 사용할시, 마지막 위치에
수들의 합 2 시간 제한이 0.5초, 그러므로 단순하게 반복문을 사용하면 안되고, 투 포인터를 사용해야 한다.설명 잘되어 있는 곳 → 투 포인터현재 위치 값이 m보다 작다면 end 증가현재 위치 값이 m보다 크거나 같다면 start 증가
부분합 수들의 합 2 과 유사한 문제이다.처음 보았을 때는 dfs로 풀면 되는 줄 알았지만 런타임 에러가 발생하여 당황했다.그럼에 조건을 알아보던 중, 답을 찾는데 시간을 많이 투자한 것 같다.✔️ 이와 같은 문제에서 가장 좋은 방법시작 값을 어떻게 줘야할까?start
소수의 연속합 투 포인터 문제를 많이 풀어본 사람들은 금방 해결할 문제이다!✏️ 투 포인터 특징arr 배열이 있을 때start : 배열에서 검토 시작점end : 배열에서 검토 끝점start과 end 사이를 검토해가며, 연속된 소수의 합이 몇 가지인지 구하면 된다!추가로
알고스팟 시작하기에 앞서, 나는 다익스트라 알고리즘의 좋은 문제가 아니라고 생각하였기에 bfs로 풀었다.문제를 보자마자, 상하좌우를 보고 bfs, dfs 둘 중 하나로 풀어야겠다고 하였지만조건 : 벽을 최소 몇 개 부수어야 하는지 구하는 프로그램을 작성하여라!힌트 :
부분수열의 합 2 N이 40개 이므로 모든 부분 수열을 다 구하려면 2^40번의 연산이 필요하다. (이는 1초안에 풀 수 없다.)수열의 길이가 40일 때, 왼쪽 오른쪽을 나눈다면(이분 탐색)왼쪽 : 20, 시간복잡도O(2^20)오른쪽 : 20, 시간복잡도O(2^20)이
합이 0인 네 정수 이 문제는 무엇보다 시간을 잘 줄여야 한다.단순하게 반복문 4개를 돌릴 경우 O(4\*n)로 틀린 답이 된다.그러면 어떠한 방법이 있는가?a, b, c, d 총 합이 0이어야 한다.이는 a + b와 c + d의 총 합이 0이라는 의미이기도 하다.반복
두 배열의 합 문제에서는 두 배열의 합을 더해서, T가 되는 모든 부 배열의 쌍의 개수를 구하는 프로그램을 작성하려고 하였다.이는 순차적으로 탐색을 하며, 완전 탐색을 해야하는 상황이다.배열의 합 : A\[i] + ... + A\[j] 그 사이의 합을 구하는 문제이다.
피자 판매 반드시 연속된 조각들을 잘라서 판매한다.반복문을 통해 풀면 되는 문제이다.간격이 1씩 앞뒤로 차이가 나니!(1) 두 피자에서 한쪽 피자로만 줄 수 있는 경우의 수가 존재할 수 있으므로distA\[0] = distB\[0] = 1로 주었다.(2) 피자 한 판에
깊콘이 넘쳐 흘러 당분간, 그리디 알고리즘 50개 풀 예정! (그리디 알고리즘 실력 상승시키기 위해 도전!)시작하기에 앞서, 이번 문제 쉬운 것 같으면서도, 답을 구하기 위한 계산식이 상당히 복잡함에 검색 했다.설명 잘되어 있는 곳일 때 어떻게 해야할까?문제를 읽어보면
빵집 그리디를 이용하자!R : 행, C : 열첫째 열에서 시작해야하고, 마지막 열에서 끝나야 한다.✔ 방향(1) ↗x-1, y+1로 이동(2) ➡x, y+1로 이동(3) ↘x+1, y+1로 이동열을 기준으로 이동한다.서로 겹치거나, 접할 수 없다. ✔ 구현check 함
컵라면 데드라인과 컵라면 순으로 정렬을 한 후, heapq를 이용하여 구현하면 된다.설명이 잘되어 있는 블로그를 참고하며 문제를 해결하였다.참고블로그
보석 도둑 현재 가장 작은 무게를 수용할 수 있는 가방 이하의 모든 보석 중 가장 값이 큰 것을 뽑아내고, 이를 가방이 끝날 때까지 반복하는 것이 목표이다.설명 잘되어 있는 곳설명 잘되어 있는 곳2
택배 (1) 받는 마을 순으로 정렬을 한다.(2) 트럭 용량를 마을 개수만큼 인덱스를 가진 배열에 각각 저장한다.ex) 트럭의 용량이 40개면, arr\[1] = 40, arr\[2] = 40, arr\[3] = 40 ~(3) 트럭의 용량을 저장한 arr를 기준으로 보
흙길 보수하기 ✔️ 문제에 나와 있는 힌트문제에서는 웅덩이의 시작 위치와 끝 위치를 입력으로 주어진다.그러므로, 1 ~ 5, 8 ~ 11, 13 ~ 16 으로 웅덩이가 위치를 이룬다.문제 자체가 어떠한 알고리즘으로 풀어야할 지 감이 안올 때는, 그리디 알고리즘 문제인지
연료 채우기 시작하기에 앞서 예제 입력나 같은 경우, 2번째 예제를 생각하지 못해 제출하니 틀렸었다.아직 제출하지 않았다면 추가 예제를 돌려보자! ex)일 때, 어떻게 방문한 주유소의 개수가 최소가 될까?이와 같은 문제는 heap을 이용하면 된다.반복문을 이용할 때 저
레이스 K개의 위치는 N보다 작거나 같은 자연수이다.이분 탐색을 통해 구현한다.mid는 (0 + N) // 2로 구한다.이전 prev위치와 현재 i번째 위치에 저장되어 있는 값들의 차이를 구한다.만약 mid보다 크거나 같다면, 1을 추가하고 기준 값 업데이트심판을 다
걷기 ✔️ 경우의 수평행 이동만 하는 경우 짝수, 홀수에 따라 다른 이동을 하는 경우 대각선, 평행 이동을 하는 경우구체적으로 설명이 잘되어 있는 곳
통나무 자르기 아무래도, 그리디 골드1문제는 생각보다 많이 어려운 것 같다.설명이 잘되어 있는 곳이를 참고하였다.
도서관 문제 규칙을 보면 쉽게 문제를 풀 수 있을 것이다.✔️ 문제 규칙(힌트)0을 기준으로 음수 또는 양수 위치로 이동을 해야한다.세준이는 최소 걸음 수를 원한다.음수쪽에서 양수쪽으로 다시 돌아오려면, 더 많은 걸음 수가 필요하다.둘 중 한쪽을 끝내고 다른 쪽에서 책
풍선 N : 팀의 수방 A, B에 보관되어있는 풍선의 수 : A, BN개의 줄에는 팀에게 달아줘야하는 풍선의 수 K, 방 A로부터 떨어진 거리 Da, B로부터 떨어진 거리 Db가 주어진다.모든 팀에게 풍선을 달아주기 위해 필요한 이동 거리의 최솟값을 한 줄에 출력한다.
문서 검색 문서가 주어졌을 때, 검색하고 싶은 단어가 몇 개가 나오는지 구하여라
우체국 문제에서각 마을까지의 거리의 합이 아니라, 각 사람까지의 거리의 합임에 유의한다.라는 말을 보고, 아 그러면 거리 x 인원 수로 해야겠구나 라는 생각을 했다.현재 위치에서 (거리 x 사람 수)로 이분 탐색하니 틀렸다고 해서, 이해가 되지 않아 검색 하고 맞추고
크게 만들기 N자리의 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하면 된다.10 44177252841 → 775841순서는 유지 시켜야한다.이러한 문제를 풀 때는, stack을 이용하면 된다.인덱스 앞 부분 삽입한다. +1씩 인덱스를
체인 이 문제는 이해하는 데에 어려운 것 같다.두 번째 줄에 입력된 것이 체인의 길이라고 하는데, 이는 체인을 연결한 고리의 수를 의미한다. 참고 : http://wookje.dance/2017/09/03/boj-2785-%EC%B2%B4%EC%9D%B8
컬러볼 구현 문제이다.크기를 기준으로 오름차순 정렬을 한다.이전 볼은 다음 볼에 영향을 주는 볼이다. 예제같은 크기일 때는 제외시켜야 한다. 같은 크기, 같은 색을 선택한 곳은 제외 한다.같은 색일 때는 제외시켜야 한다. 위를 통해 규칙을 알 수 있어, 공식이 나온다.
종이 접기 이분 탐색 문제이다.항상 종이를 절반씩 접는다고 할 때, 제시된 문자열로 종이를 접을 수 있는지 확인하는 문제이다.종이를 절반씩 접게 되면, 항상 접은 부분을 중심으로 양쪽에는 반대로 접힌 흔적이 남게 된다.종이의 길이가 홀수이다.1 : OUT, 종이가 시계
초콜릿 식사 우리는 k개 정사각형을 먹어야 남은 수업을 졸지 않고 버틸 수 있다.막대 초콜릿 하나를 나누어야 한다.정사각형이 D개 있는 막대는 D/2개 막대 두 조각으로 쪼개진다.ex) 적어도 K개 정사각형을 먹어야 남은 수업을 졸지 않고 버틸 수 있다. K : 6개세
방 번호 ex) N = 3, M = 21, P0 = 6, P1 = 7, P2 = 88 + 7 + 6 = 212 1 0가격 p를 담고 있는 room 배열의 마지막 인덱스부터 시작반복문으로 x부터 m+1만큼 dp\[현재 요금] = min(dp\[현재 요금 - x] \* 1
문자열 복사 문자열 S가 주어졌을 때, 이 문자열의 부분을 복사하여 P라는 새로운 문자열을 만들려고 한다.파이썬에서 find() 함수를 사용하면 된다.현재 P의 i번째 위치를 검색할 때, i 와 i + 1을 붙인게 S에 있다면 i + 2을 붙여보고 S에 있는지 확인한다
전구와 스위치 설명 잘되어 있는 곳첫 번째 스위치를 눌렸을 경우 1, 2번 바뀌고 2 ~ n-1까지 스위치를 눌렀을 때는 n - 1, n, n + 1n 스위치를 눌렀을 때는 n - 1, n 0번 -> 1번 -> 2번 -> 3번 ~ 이와 같이 영향을 준다.그러므로,
카드 정렬하기 문제를 보았을 때 이해하는데 생각보다 시간이 많이 걸렸다.반례 테스트 케이스 를 이해한다면 문제가 쉽게 풀릴 것이다.입력된 데이터들을 우선순위 큐에 넣은 후, 첫 번째 두 번째 데이터를 꺼낸다.꺼내서 다시 우선순위 큐에 넣는다.이를 반복해서 구하면 된다.
정육점 문제에서 원하는 답안 고기를 구매하기 위해서 필요한 최소 비용을 계산한다.(1) 고기 무게, 가격 입력 후 정렬하기가격 오름차순, 무게 내림차순으로 정렬한다.(2) 고기의 무게를 더해가면서 해당 고기가 이전에 탐색한 고기의 가격과 일치 여부를 확인한다.만약, 이
Yonsei TOTO 사람 수와 마일리지가 주어진다.매번 각 사람이 마일리지를 얼마나 넣었는지 주어진다.✔️ 경우의 수신청한 사람 수 > 과목의 수강인원수업을 무조건 들어야 한다.아니라면, 사람 수를 기준으로 내림차순한다. 수업에서 과목의 수강인원이 n이라면 n번째에
카약과 강풍 시간 제한이 1초인 그리디 알고리즘이다.✔ 경우의 수카약이 손상된 팀의 번호가 주어진다.카약을 하나 더 가져온 팀의 번호가 주어진다.여기서, 카약이 손상된 팀 중에서 카약을 하나 더 가져온 팀의 번호가 주어질 수 있다.이분 탐색을 사용하여 구현하였다. 사
지뢰찾기 지뢰찾기 게임일 때,1 : 0번과 1번 중 지뢰가 1개가 존재한다.2 : 0, 1, 2번 중 지뢰가 2개가 존재한다.1 : 1, 2, 3번 중 지뢰가 1개가 존재한다.1 : 2, 3, 4번 중 지뢰가 1개가 존재한다.0 : 3, 4, 5번 중 \* 지뢰
뒤집기 3 이와 같이 현재 인덱스 값 정렬 기준으로 오름 차순인데 규칙을 어기면 내림차순으로 변경하여 삽입정렬 기준으로 내림 차순인데 규칙을 어기면 오름차순으로 변경하여 삽입을 한다.
색종이 6cm 크기의 정사각형 갯수를 구하는 문제이다.✔ 경우의 수(1) 한 변의 길이가 6인 정사각형 필요한 갯수6cm 갯수 만큼(2) 한 변의 길이가 5인 정사각형 필요한 갯수5cm 갯수 만큼, 1cm 갯수를 빼준다.(3) 한 변의 길이가 4인 정사각형 필요한 갯수
Project Teams 공정성을 높이기 위해 팀원 코딩 역량의 합을 최대한 일정하게 유지해야한다.Sm = min{w(Gi) | 1 ≤ i ≤ n}이 최대화 되도록 한다.이와 같은 규칙을 보면, 정렬을 한 후 i번째와 배열길이 - i - 1 값을 더하면서, 가장 작은
커플 만들기 n, m명이 있을 때 차이의 합이 최소가 되도록 하려한다.dp와 그리디를 이용하여 풀 수 있다. ex)결국 6이라는 결과를 얻을 수 있다. dp부분에서 헷갈리는 문제인 것 같다.
합 문자열이 입력될 시, 인덱스 0번부터 높은 숫자를 주면 된다. (0 ~ 9 사이)다만, 첫 번째에 나온 문자에 0을 줄 수가 없다.이럴 경우 J에 0을 주면, 문제에서 제시한 0으로 시작하는 수는 없다.를 어기게 된다.그러므로 문자열이 입력될 때, 첫 번째로 나온
A와 B ✔️ 규칙두 번째 입력된 문자열을 통해 첫 번째 문자열을 만들 수 있는지 체크하면 된다.문자열의 뒤에 A를 추가한다.문자열을 뒤집고 뒤에 B를 추가한다.
회문 0 : 회문, 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열1 : 우사회문, 한 문자를 삭제하여 회문으로 만들 수 있는 문자열2 : 이외두 번의 반복문을 이용하면 된다.첫 번째로는 left에 0을 주고 right에는 1을 준다.left += 1, rig
수열의 점수 n개의 정수로 이루어진 수열이 있다.한 정수를 제거할 수 있다.두 정수를 제거할 수 있다.한 정수를 제거하는 경우 그 정수가 점수두 정수를 제거하는 경우 두 정수의 곱이 점수수열에 아무 수도 남지 않게 되었을 때, 점수의 총 합의 최대를 구하는 프로그램이와
순회강연 d : 일(day)p : 강연료하루에 최대 한 곳에서만 강연할 수 있다.최대 한 곳에서만 강연을 할 수 있다.이와 같은 문제는 우선순위 큐와 그리디 알고리즘을 이용한다면 풀 수 있는 문제이다.딕셔너리를 이용하여, key는 일, value : 강연료를 저장한다.
주식 시간 제한이 5초, N이 1000000이므로 O(N^2)으로 풀면 안된다.이중 for문으로 풀었는데 시간 초과 발생그래서 다른 방법으로 뒤에서부터 검색하면서현재 최대값보다 현재 인덱스 데이터가 더 크다면, 교체아니라면, 이익 += (현재 최대값 - 현재 인덱스 데
댄스 파티 여러번 채점 결과 맞추지를 못해 블로그를 참고했다.(1) 남자와 여자 각각 양수와 음수일 때를 각 리스트에 넣어준다.(2) 양수일 경우 오름 차순, 음수일 경우 내림차순으로 정렬(3) 함수를 통해 쌍을 구할 것이다. 정렬된 2개의 리스트에서 순차적으로 탐색을
폴리오미노 AAAA : 4개BB : 2개 일 때를 기준으로 나뉜다.X일 때는 횟수를 1씩 증가한다..일 때 이전까지 나온 X개수가 홀수라면 나간다. 짝수개라면 0으로 처리한다.횟수가 2개일 경우, BB횟수가 4개일 경우, AAAA가 된다.만약, 횟수가 2의 배수가 아니
로프 k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때 각각의 로프에는 모두 고르게 w/k만큼의 중량이 걸리게 된다.참고한 자료를 통해 알게 되었는데이와 같은 규칙이 있다고 한다. 사진2
주유소 사진3이러한 문제를 풀 때 규칙이 있다.매번 인덱스를 확인할 때마다 최적의 결과값인지, 문제에 따르면 최소의 비용인지 확인하면 된다. 사진4
알바생 강호 내림차순으로 정렬한 후돈 - (받은 등수 - 1)식을 적용하면 된다. 사진
2+1 세일 내림차순으로 정렬한 후, 배열을 3의 배수 크기로 만든 후, 반복문을 통해 계산하면 된다. 사진2
에너지 드링크 ✔ 규칙a의 양을 xa + (xb / 2)로 만들고, b를 버리기b의 양을 xb + (xa / 2)로 만들고, a를 버리기\`내림차순으로 정렬 후, 인덱스마다 이전 결과값가 현재 값을 비교하여 작은 값을 2로 나누어주면 된다. 사진3
서강근육맨 N개의 운동 기구를 한 번씩 사용해보고 싶은 향빈이는 이전에 사용하지 않았던 운동기구를 선택한다.PT 받을 때 운동 기구 최대 2개를 사용한다. (한 개만 남았을 경우 제외 무조건 2개)근손실 정도가 M을 넘지 않도록 하고 싶다.✔ 경우의 수정렬을 한 후,
잃어버린 괄호 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다.✔ 방법최솟값을 만들기 위해서는 먼저 -을 기준으로 괄호를 치면 된다.ex)\- 기준으로 괄호를 친 후, +을 기준으로 계산하면 된다.\+기준으로 계산한 후,
블로그2 문제에서 B와 R이 입력되었을 때, BR로 색칠하여 만들면 되는 문제이다.반복문 두 번으로 현재 인덱스에서 해당 구간이 B인가 R인가로 체크해도 되지만, (다른 사람 블로그를 보니) B -> R or R -> B로 바뀐다면 횟수를 1씩 증가시켜도 된다. 기존
A->B A를 B로 바꾸면 되는 문제이다.✔️ 규칙2을 곱한다.1을 수의 가장 오른쪽에 추가한다.이와 같이 초기값을 결과값으로 바꿀 때는 반대로 진행하면 된다.B → A를 만들 수 있는지 없는지 확인하면 된다.현재 b가 홀수이면 만들 수 없다.현재 b가 a보다 작다면
민겸 수 민겸 숫자는 0 이상의 정수 N에 대해 10^N 또는 5 × 10^N 꼴의 십진수를 대문자 M과 K로 이루어진 문자열로 표기한다. 10^N 꼴의 십진수는 N + 1개의 M으로, 5 × 10^N 꼴의 십진수는 N개의 M 뒤에 1개의 K를 이어붙인 문자열로 나타낸
꿀 따기 문제가 해결되지 않았을 때, 설명이 잘되어 있는 블로그를 참고하자!참고 블로그 사진2
강의실 배정 김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.
행복 유치원 문제에 대한 로직이 떠오르지 않아 구글링 했다.
최소 회의실 개수 N개의 회의를 입력받는다.회의의 시작시간과 끝나는 시간이 주어진다.(이전에 풀었던 문제와 유사하다.)이와 같은 문제들은 우선순위 큐를 이용하면 된다. 사진1
센서 문제를 이해하기 힘들어 예시를 참고했다.참고집중국을 센서의 좌표에 두고 길이를 재면 된다.이 되는데, 3 6 7 8 10 12 14 15 18 20로 정렬 후, 사이의 거리를 계산한 후 최소끼리 k개 합한 것이 나누고자 하는 영역과 같다.위 예시를 보면 10 12
배 처음에는 내림 차순 정렬하여 문제를 풀려고 했다.크레인에 큰 것부터 넣기다만, 이와 같은 반례가 있다.크기 4인 박스를 크레인에 넣고, 그 다음 크기 3인 박스를 크레인에 넣어야 한다.
도영이가 만든 맛있는 음식 도영이가 만든 맛있는 음식 문제, 재료 N개가 있다.신맛 S와 쓴맛 B가 있을 때신맛은 신맛들의 곱으로 계산쓴맛은 쓴맛들의 합으로 계산신맛과 쓴맛 차이가 가장 작은 요리를 만드는 프로그램→ dfs를 통해 구현하면 된다. (깊이 우선 탐색)
타일 채우기 3 N-1일 때 N-2일 때 예외 케이스 (남는 크기가 4일 때) ✔️ 점화식dp\[n] = dp\[n-1] x 2 + dp\[n-2] x 3 + (dp\[n-3] x 2 + dp\[n-4] x 2 + ~ + dp\[0] x 2) 💡 참고나동빈 수업
타일 채우기 홀수일 때는 타일을 만들 수 없다.짝수일 때만 타입을 만들 수 있다.(타일을 직접 경우의 수마다 그리다 보니 시간이 생각보다 많이 걸렸다.) 경우의 수 (1) 길이 n일 때는 가운데 넣은 방법 2개가 있다.(2) n - 2에서는 길이 2가 추가된다. (길이
제곱수의 합 문제 이해이 문제에서는 n보다 작은 것 중에 제곱 수의 최댓값을 기준으로 소스를 작성하려 했지만➡️ 12인경우 : 9와 3 : 4 , 8와 4 : 3이 된다.➡️ dp\[12] = 3위 예시와 같이 반례가 존재한다.n까지 반복문을 돌리면서 1 ~ n 사이에
모든 레코드 조회하기 테이블 ANIMAL_INS 구조 ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE를 그대로 출력하고✏️ 한가지 조건ANIMAL_ID 순으로 조회하는 SQL문이다.
신고 결과 받기 (1) Dictionary신고를 k번 이상 받았을 경우 정지된다. 정지된 경우, 그 사람을 신고한 사람에게 메일이 가게 된다.(2) 신고를 k번 받은 사람만 정지된다. → key = 신고 받은 사람으로 설정key : 신고 받은 사람, value : 신고
없는 숫자 더하기 소스를 한 줄로 적어보기
신규 아이디 추천 이 문제는 자신이 사용하는 언어 이해도에 따라 쉽게 or 어렵게 풀리는 문제이다.1단계파이썬의 lower 메서드를 사용하면 된다. 2단계isdigt : 숫자 판별, islower : 소문자 3단계replace : 지정한 문자열을, 지정한 문자열로 교체
K번째 수 파이썬에서는 list 깊은 복사할 때는 import copy, copy.deepcopy(list) 을 사용해야 한다. 잘짠 코드
최댓값 구하기 MAX(테이블 구조 열 이름) : 최댓값MIN(테이블 구조 열 이름) : 최솟값SUM(테이블 구조 열 이름) : 총 합 최솟값 구하기 위에서 설명했기에 생략
오픈채팅방 ex) 결과 입력을 보면Enter인 경우 : Muzi님 들어왔습니다.Leave인 경우 : Muzi님 나갔습니다.Change인 경우 : x이를 알 수 있다.중간에 닉네임이 교체 될 수도 있다.그래서 딕셔너리을 사용한다. 중간에 key에 대한 value를 변경할
숫자 문자열과 영단어 딕셔너리 key 와 value를 사용하여 해당 key에 대하여 value로 교체한다.참고로 이 코드는 프로그래머스에서 가져온 코드이다. (내 코드는 이에 비해 너무 지저분해서 지웠다!)
이름이 없는 동물의 아이디 열에서 NULL인 것들을 출력하려면?WHERE 열 이름 IS NULL 루시와 엘라 찾기 이 문제에서 나온 조건으로이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물이와 같이 특정 열에서 원하는 데이터
2016년 2월 29일까지4, 6, 9, 11월은 30일까지나머지는 31일까지이다.
역순 정렬하기 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.테이블 열 : 동물의 이름, 보호 시작일역순 : 역으로 정렬하면
메뉴 리뉴얼 라이브러리를 잘 활용한 코드 참고하였습니다.참고 course의 숫자만큼 반복 (2, 3, 5의 경우)2개짜리 조합, 3개짜리 조합, 5개짜리 조합(1) 모든 order에 대한 반복order에 대해 course 값 (2개, 3개, 5개) 만큼 조합ex) or
멀쩡한 사각형 수학적 원리로 설명이 잘되어있다.설명 잘되어 있는 곳
오픈채팅방 ex) 결과 입력을 보면Enter인 경우 : Muzi님 들어왔습니다.Leave인 경우 : Muzi님 나갔습니다.Change인 경우 : x이를 알 수 있다.중간에 닉네임이 교체 될 수도 있다.그래서 딕셔너리을 사용한다. 중간에 key에 대한 value를 변경할
짝지어 제거하기 하나의 문자열에서 중복되는 문자를 제거하는 알고리즘일 때는 스택을 이용하면 된다.i번째 인덱스가 i-1번쨰 인덱스와 같다면, pop다르다면, push현재 스택이 비었다면 push
키패드 누르기 1, 4, 7 : 왼손3, 6, 9 : 오른손2, 5, 8 : 위치 및 손잡이로 판단문제 이해하기 위해 먼저 예시를 보자!위 예시를 보면 경우의 수를 알 수 있다.(가장 가까운 위치 : 두 좌표 x, y 차이 값으로 알 수 있다.)그리고, 입력된 0 ~
행렬 테두리 회전하기 이 문제는 무엇보다 회전하는 방법을 알고 있다면 쉽게 풀 수 있는 문제이다.위 예시를 보면 회전 식을 알 수 있다.회전 식을 적용하면 답을 쉽게 구할 수 있다.
아픈 동물 찾기 아픈 동물의 아이디와 이름을 조회아픈 동물을 판별하기 위해서는 조건문이 필요하다.여기서는 그룹으로 묶지 않으므로, 조건 처리로 WHERE 문을 주면 된다. 동명 동물 수 찾기 이름이 2번이상 쓰인 이름을 찾아야 하는데 GROUP으로 묶은 후 조건
괄호 변환 프로그래머스 문제를 풀 때는 입출력 예제를 보며 문제를 어떻게 풀어야 하는지 감을 익힐 수 있다. (아~ 이렇게 풀어야 겠구나)보통 수학문제 풀때, 예제 문제를 풀어 보며 공식을 적용하면서 익히는 것처럼 말이다.ex) )(()(u : ))(( + v : )(
뉴스 클러스터링 파이썬을 사용하기에 좋은 점으로, 라이브러리를 사용하면 쉽게 구현할 수 있다.소문자와 대문자 : upper()알파벳 저장하기 : list알파벳 중복 개수 세기 : Counter알파벳 개수 만큼 똑같은 문자 만들기 : Counter.elements()이를
이름이 있는 동물의 아이디 동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.↑ 위와 같은 조건문이 있다.이름이 있는 동물의 ID NAME IS NOT NULLID는 오름차순 정렬 OR
거리두기 확인하기 문제에서 이미 조건들을 다 제시해주었다.✏️ 조건(1) 맨해튼 거리가 2이하로 앉지 말아주세요.(2) 단, 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용한다. 프로그래머스 문제집 사진 ✔️ 내가 생각한 경우의 수현재 P의 위치를
어린 동물 찾기(https://programmers.co.kr/learn/courses/30/lessons/59037 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 이때
수식 최대화 permutations 라이브러리를 이용해, 수학 기호 경우의 수를 모두 구한다.먼저 문자열에서 숫자와 \*, -, +를 분리한다.현재 나온 수학 기호를 통해 계산을 하는데, 파이썬에서는 문자열에서도 숫자와 수학기호가 같이 있을 때는 eval 함수를 통해
동물의 아이디와 이름 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문 중성화 여부 파악하기 ✔️ CASE ~ WHEN ~ TEHN ~ ELSE END중성화된 동물은 SEX_UPON_INTAKE 컬럼에 Neutered 또는
튜플 이 문제는 문자열에서 문자를 숫자로 얼마나 잘 바꾸는 가에 따라 문제가 쉽게 풀린다.lstrip : 문자열에서 왼쪽 끝에 있는 지정한 알파벳을 제거하고 싶을 때rstrip : 문자열에서 오른쪽 끝에 있는 지정한 알파벳을 제거하고 싶을 때
여러 기준으로 정렬하기 정렬 조건이 여러 개 있을 때와 같이 사용한다. NULL 처리하기 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이
상위 n개 레코드 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.가장 먼저 들어온 동물을 구하기 위해서는, 오름차순으로 정렬을 한 후, 출력할 갯수를 제한하면 된다!ORDER BY 열 이름 : 오름차순으로 정렬LIMIT 1 : 출력할
빛의 경로 사이클 최근에 풀었던 문제 중에 가장 어려웠다.🦑 왜?문제 이해가 안되서이해는 했지만, 어떻게 구현해야할지 감이 오지 않아서 ✔️ 문제 이해 팁빛이 "S"가 써진 칸에 도달한 경우, 직진합니다.빛이 "L"이 써진 칸에 도달한 경우, 좌회전을 합니다.빛이 "
전화번호 목록 해시 문제이지만, 파이썬 라이브러리를 사용시, 쉽게 구현할 수 있다.참고 자료
프린터 인덱스 중에서 번호가 가장 큰 것을 기준으로 시작된다. enumerate를 사용하고, queue를 이용하면 된다. (FIFO) ✔️ enumerate란?인덱스 번호와 컬렉션의 원소를 tuple형태로 반환
소수 찾기 숫자가 적힌 문자열 numbers가 주어졌을 때, 만들 수 있는 소수는 몇 개인지 구하는 문제이다.전형적인 완전 탐색, back_tracking 문제이다.라이브러리를 이용해 구현할 수 있지만, 알고리즘 back_tracking을 이용해 구현했다.
게임 맵 최단거리 문제를 보면 (0, 0) 위치에서 (마지막 행, 마지막 열)로 간다.움직일 수 있는 방향은 동서남북이다.또한, 한번 지나간 경로는 다시 지나갈 수 없다.이와 같아 벽이 없는 자리 1를 지나갈 때 0으로 바꿔주면 그자리는 벽이 있는 자리가 되므로, 이미
조이스틱(https://programmers.co.kr/learn/courses/30/lessons/42860 블로그를 참고했다.알파벳 변경 최솟값을 추가하고알파벳 다음부터 연속된 A 문자열 찾는 문제이다.참고 블로그 1참고 블로그2 조이스틱2
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수
숫자게임ex)A 팀원들이 부여받은 수가 출전 순서대로 나열되어있는 배열 A와 i번째 원소가 B팀의 i번 팀원이 부여 받은 수를 의미하는 배열 B가 주어졌을 때, B팀원들이 얻을 수 있는 최대 승점을 return 하도록 구현해야한다. A를 기준으로 B가 최대로 이길 수
징검다리 건너기 ✔️ 방법 1 (x)인원수를 한명씩 늘려가면서 찾을 경우, 효율성에서 시간초과가 발생한다. (for문 2개일 경우) ✔️ 방법 2 (o)현재 나올 수 있는 인원수를 기준으로 이분 탐색을 한다. 최소 인원 수: 0명, 최대 인원 수 : 징검다리
자물소와 열쇠 자물쇠 크기 : N x N열쇠 크기 : M x MM <= N일 때, 열쇠를 돌려가면서 자물쇠를 모두 1로 만들 수 (열쇠로 자물쇠를 열 수) 있다면 true자물쇠를 모두 1로 만들 수 없다면 false이다.ex) 열쇠를 90도씩 회전해가면서 맞추었을
후보키 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다.그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate