본문 바로가기

알고리즘72

Programmers - 상호평가 https://programmers.co.kr/learn/courses/30/lessons/83201 코딩테스트 연습 - 2주차_상호평가 [[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD" programmers.co.kr 풀이 (y, x)-> y가 x를 평가한 점수 한명에 대한 평가들을 누적합하면서 최소값, 최대값, 최소값 갯수, 최대값 갯수를 확인 자기자신을 평가한 점수가 유일한 최고점/최저점이라면 그 점수를 제외하고 평균을 계산 - (자기 자신 점수==min/max) && (max/min_cnt==1) #i.. 2021. 9. 14.
Programmers - 부족한 금액 계산하기 https://programmers.co.kr/learn/courses/30/lessons/82612 코딩테스트 연습 - 1주차_부족한 금액 계산하기 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이 programmers.co.kr 풀이 필요한 전체 금액을 구하고 가지고 있는 money보다 크면 부족한 금액만큼, 같거나 작으면 0을 return using namespace std; long long solution(int price, int money, int count) { long long sum=0; for(int i=1;i 2021. 9. 14.
Programmers - 문자열 압축(Python) https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 풀이 1 ~ s의 길이//2 만큼 단위를 늘려가면서 탐색 단위 만큼 확인 하면서 같다면 cnt갱신 다르면 cnt를 포함한 단위 문자열을 추가 def solution(s): MIN=int(987654321) length=len(s) if(len(s)==1): return 1; for cut in range(1, length//2+1): # 문자열 단위 1 .. 2021. 9. 6.
Programmers - 자물쇠와 열쇠(C++) https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 풀이 자물쇠 크기 재할당 (2 x (열쇠크기-1) + 자물쇠크기) x (2 x (열쇠크기-1) + 자물쇠크기) 후 정중앙에 자물쇠 값 할당 더보기 재할당된 자물쇠에서 한칸씩이동, 90회전으로 모든 경우의 수를 탐색 - 열쇠의 사이즈만큼 자물쇠 배열에 + 연산 - 실제 자물쇠의 영역을 확인 -> 값이 1이 아니라면 return false - returen false로 빠져나가는 것이 없다면 return true .. 2021. 9. 5.
BOJ 12100 - 2048(Easy)(C++) https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 풀이 상하좌우를 이용한 5번 이동에 모든 경우의 수를 탐색 해당 경우에 대해 이동(상하좌우 모든 경우에 대한 이동을 구현하지 않고 위로 이동에 대한 이동만 구현) - 상하좌우에 따라 회전 - 상 : 0˚, 하: 180˚, 좌 : 90˚, 우: 270˚ - 위로 이동 - 다시 제자리로 회전 - 상 : 0˚, 하: 180˚, 좌 : 270˚, 우: 90˚ - 5번의 이동이.. 2021. 9. 2.
BOJ 12015 - 가장 긴 증가하는 부분 수열2(C++) https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 풀이 벡터의 초기 상태 {0} 현재 입력 값이 벡터의 마지막 값보다 크면 -> 벡터에 push_back 작으면 -> lower_bound를 이용해 입력값보다 작거나 큰 위치를 찾아내서 교환 벡터의 초기값 0을 제외해야하기 때문에 v.size() - 1을 출력 더보기 ex) {10, 20, 30, 5, 10, 20, 30, 40} 0. {0} 1. 10 마지막 값보다 큼 {0, 10} 2. 20 마.. 2021. 9. 2.
BOJ 3020 - 개똥벌레(C++) https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net 풀이 algorithm 라이브러리에서 제공하는 이진탐색 함수인 lower_bound, upper_bound를 이용하여 풀 수 있음 * 이진탐색을 위해서는 오름차순 정렬이 되어 있어야함 lower_bound(begin, end, target) : target 값 이상의 숫자가 배열 몇 번째에 있는지 탐색 upper_bound(begin, end, target) : target 값을 초과하는 숫자가 배열.. 2021. 9. 1.
BOJ 19236 - 청소년 상어(C++) https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 풀이 상어의 위치는 (0, 0)에서 시작 1. 현재위치의 물고기 먹음 - 먹은 물고기의 번호를 누적 합 - 먹은 물고기의 방향을 가짐 2. 물고기 이동 - 죽은 물고기는 제외하고 이동 - 번호가 낮은 물고기부터 이동, 이동하는 위치에 다른 물고기가 있다면 위치 교환 - 해당 위치로 이동하지 못한다면 45도 반시계 회전 후 탐색 - 어느 방향으로도 이동하지 못하면 현재 위치 유지 .. 2021. 9. 1.
BOJ 15684 - 사다리 조작(C++) https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 풀이 추가한 가로선이 3개가 초과되지 않도록 모든경우의 수를 확인 원래의 세로선으로 돌아가는 지 세로선마다 확인 왼쪽으로 갈지, 오른쪽으로 갈지 구별하기 위해 왼쪽에서 오른쪽으로 이어지는 시작점만 true로 표기 더보기 if (map[y][now]) now++; else if (map[y][now - 1]) now--; ex) #include using namespace std; int N, M.. 2021. 8. 31.