728x90

전체 글 148

[프로그래머스/Lv2] - 튜플

https://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 실제적으로 문자열에서 원하는 데이터를 추출할 수 있는지를 확인하는 문제로 느꼈다. 처음에 [입출력 예] 에서 result가 왜 저렇게 나오는지 이해할 수 없었다. 문제 해결을 위해 s를 각 집합{ ?, ?, ? }를 요소의 개수가 오름차순으로 정렬되어야 한다. 즉, { {4, 2, 3}, { 3 }, { 2,3..

[프로그래머스/Lv2] - 전화번호 목록

https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 해시를 활용하여 문제를 해결해야 한다. 실제로는 꼭 해시를 활용하지 않아도 해결이 가능하다고 한다. 문제 풀이또한 주관적인 생각으로는 해시라고 하기보다 c++ 에서 unorder_map을 활용할 줄 아는 것이 필요하다고 생각한다. 처음에는 phone_book의 모든 요소를 unordered_map의 key로 등록하고 unordered_map을 iterator..

[프로그래머스/Lv2] - 가장 큰 수

https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 입력을 조합하여 만들 수 있는 가장 큰 수를 찾는 문제이다. 처음에 1, 10 등이 들어와도 4자리로 맞춰서 문제를 해결할려고 했으나 1~6 테스트 케이스에서 계속 실패가 발생하였다. 오히려 sort()를 사용할 때 2개의 숫자로 조합할 수 있는 수를 비교하는 것이 정답이었다. 더보기 #includ..

[백준] 11444 - 피보나치 수 6

https://www.acmicpc.net/problem/11444 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 피보나치를 활용한 문제지만 입력과 모듈러 연산이 추가되었다는 점을 주의해야한다. 기존의 피보나치 수 계산 Fn+2 = Fn+1 + Fn (n >= 2)를 그대로 사용하면 시간초과가 발생한다. 찾아보니 행렬연산으로 대체할 수 있었다. 더보기 #include #include using namespace std; // global typedef long long VERYLONG; typedef vector MATRIX; const VERYLONG N_MAX = 1000000000..

[백준] 10830 - 행렬 제곱

https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 이 문제는 행렬의 곱과 모듈러 연산을 이해하고 구현할 수 있어야 풀 수 있는 문제였다. 또한, N과 B의 입력이 최대 100,000,000,000 까지 주어질 수 있다는 점을 감안한다. 더보기 #include #include using namespace std; // global typedef unsigned long long VERYLONG; typedef vector VECTOR; // method VECT..

[백준] 2740 - 행렬 곱셈

https://www.acmicpc.net/problem/2740 2740번: 행렬 곱셈 첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개 www.acmicpc.net 간단히 N x M, M x K 두 행렬의 곱을 구하는 문제이다. 더보기 #include #include using namespace std; int main() { // init std::ios::sync_with_stdio(false); // input vector A_Matrix; vector B_Matrix; // A int N = 0; int M = 0; (void)sca..

[백준] 1780 - 종이의 개수

https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. www.acmicpc.net 기존에는 N / 2 를 이용해 재귀를 했지만 이번 문제에서는 N / 3을 이용해 영역마다의 종이의 개수를 계산한다. 기존 보다 재귀를 하는 영역이 늘어났으며, 결과는 나오지만 586 ms 정도의 수행시간이 걸린다. 채점 현황에 400 ms 이하의 코드들이 있으므로 다시 한번 검토가 필요하다. 더보기 #include #include using namespace std; // global ..

[백준] 1992 - 쿼드트리

https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 2630, 색종이 만들기에서 아주 조금 응용하면 풀 수 있다. (응용이 맞나..?) 재귀 + 분할정복의 방법으로 해결한다. '('와 ')'의 삽입 타이밍 또한 생각해 본다. 더보기 #include #include #include using namespace std; // global string answer; vector board; enum QUAD { e_Zero = 0, e_On..

[백준] 2630 - 색종이 만들기

https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 분할 정복 단계에서 맨 처음 풀게된 문제이다. 재귀를 이용한 분할 정복으로 생각하고 문제의 해결방법을 생각해본다. 처음에는 사각형의 왼쪽 위, 오른쪽 아래가 필요할 줄 알았으나 왼쪽 위 좌표만 있어도 충분했다. 더보기 #include #include using namespace std; // global int whiteCnt; // 0 int blueCnt; // 1;..

반응형