본문 바로가기

algorithm

(135)
프로그래머스_문자열 압축(C++) https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr [문제 풀이] 1. 입력된 stinrg을 1의 크기부터 s.size()까지 compression을 돌립니다. 2. 그 후 들어온 크기로 잘라서 비교할 문자열을 temp에 넣습니다 3. 크기만큼 계속 비교하면서 같으면 overlap변수를 증가시켜주고 아니면 result 문자열에 추가하고 temp 문자열을 업데 이트시켜줍니다. 4. 비교하면서 끝인지 아닌지 계..
백준 5557_1학년(C++) https://www.acmicpc.net/problem/5557 5557번: 1학년 문제 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들�� www.acmicpc.net [문제 풀이] DP를 이용하여 문제를 풀었습니다. 1부터 N까지 받은 후에 2부터 N-1까지 돌면서 dp[i][j]에 먼저 체크해주었습니다. 상근이는 0~20까지의 숫자까지만 알기 때문에 j를 21로 크기를 선언하고 - +가 범위를 벗어나는지 보고 벗어나면 무시하고 아니면 더하는 식으로 했습니다. [코드] #include using namespace std; int N; int arr[..
백준 12865_평범한 배낭(C++) https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net [문제 풀이] DP를 이용하여 문제를 풀었습니다. 물건 N 개번 돌리면서 각각 돌면서 무게별로 준서가 배낭에 그 물건을 담았을 때와 담지 않았을 때를 고려해서 그러한 두값의 MAX로 풀었습니다. [코드] #include #include #include using namespace std; int N, K; vector item; i..
백준 14500_테트로미노(C++) https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net [문제 풀이] DFS와 시뮬레이션을 이용하여 문제를 풀었습니다. 이번 문제는 2차원 배열에서 5가지 형태로 이루어진 부분 배열의 최..
프로그래머스_카펫(C++, JAVA) https://programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 완전 탐색을 이용하여 문제를 풀었습니다. red로 이루어진 직사각형을 구하기 위해 1 ~ red/2 까지 반복문을 이용해서 구해주었습니다. 그 후 (2 * i) + ((red / i + 2) * 2) == brown 의 조건을 통과하면 i + 2, red / i + 2 을 넣어주었습니다. [C++] #include #include using namespace std; vector solution..
백준 11053_가장 긴 증가하는 부분 수열(C++) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net [문제 풀이] 다이나믹 프로그래밍을 이용하여 문제를 풀었습니다. 이 문제는 증가하는 부분 수열 중에 가장 긴 부분 수열을 찾는 문제입니다. 부분 수열을 찾기 위해 DP 배열을 선언하여 메모제이션 해주었습니다. 2중 반복문을 돌면서 0번째 인덱스부터 i번째 인덱스까지 반복하면서 자신보다 값이 작은 경우..
백준 14502_연구소(C++) https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. www.acmicpc.net [문제 풀이] 시뮬레이션을 이용하여 문제를 풀었습니다. 시뮬레이션을 구현하는 과정에서 BFS와 조합이 쓰였습니다. 이 문제의 경우 연구소를..
프로그래머스_등굣길(C++, JAVA) https://programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] DP를 이용하여 문제를 풀었습니다. 먼저 이차원 배열을 선언하여 우물을 체크 해주었고 이차원 배열 DP를 이용하여 풀었습니다. (1,1)의 지점에서 (m,n)까지 반복문을 돌며 처음 지점에 올 수 있는 방법은 한 가지인 것을 이용하여 dp[1][0] 을 1로 초기화해주며 다음 길로 올 수 있는 경우는 위에서 오는 것과 옆에서 오는 것을 고려하여 점화식을 짰습니다. 이코드의 핵심은 if (map[..