본문 바로가기

코딩테스트

(34)
[백준/C++] 1015번. 수열 정렬 문제 1015번: 수열 정렬 P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주 www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 설명을 이래저래 돌려놨지만, 결국 가장 작은 수부터 0, 1, 2, ..., N-1을 대입한다는 소리 - 가장 간단한 방법은 min_element를 사용하는 것이다. 1. 배열 A, P를 생성한다. 2. 정수 i, c = 0을 선언한다. 2. 배열 A를 입력받는다. 3. A 내에서 min_element를 적용, 최솟값의 인덱스 i를 얻는다.. 4. P[i]에 c를 대입하..
[백준/C++] 1094번. 막대기 문제 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 1. 첫 번째 풀이 (마지막 풀이) 사고 과정 - 막대기의 크기는 2의 지수승만 가능하다. (64, 32, 16, 8, 4, 2, 1) - 몇 번 잘랐는 지가 아닌, 몇 개를 붙였는가를 묻는 문제. - 2진수로 표현 후 1의 개수를 세는 문제. 1. 입력 값을 2진수로 변환 2. 2진수의 1의 개수를 세서 반환 코드 #include int main() { int x, count = 0; scanf("%d", &x); for (int i = 0; i < ..
[백준/C++] 1051번. 숫자 정사각형 문제 1051번: 숫자 정사각형 N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 www.acmicpc.net 1. 첫 번째 풀이 (마지막 풀이) 사고 과정 - 일단 맨 왼쪽 위에서 시작, 정사각형을 찾는다. - 가장 큰 정사각형을 찾는 것이므로, M에서부터 1씩 줄여가며 숫자가 같은지 검사 - 맨 첫 줄에서 사각형이 안 만들어진다면, 다음 줄로 넘어가 반복 - N, M은 최대 50이니 오래 걸리지 않을 것 같다. - 크기가 가장 큰 사각형을 찾았을 때 종료해야 하므로, 예를 들어 5 5라면 크기가 25인 경우, 16인 경우, 9인 경우... 순으로 비교하는 게 맞..
[백준/C++] 1009번. 분산 처리 문제 1009번: 분산처리 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 길게 늘여썼지만, 결국 a^b의 1의 자리 수를 구하는 문제. - 단, b가 최대 1,000,000인 만큼 연산자만 사용하면 계산할 수 없다. - 모듈러 연산을 안다면 순식간에 풀 수 있다. 어렵게 말할 것 없이 풀어쓰자면 아래와 같다. - 7을 10번 곱했을 때 1의 자리 수는 얼마인가? - 7, 9, 3, 1, 7, 9, 3, 1, 7, 9... 이처럼 1의 자리 수는 계속 반복되는 것을 알 수 있다. - 우선 간단하게 구현해보자..
[백준/C++] 1049번. 기타줄 문제 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 브랜드 개수는 눈속임. 결국 제일 싼 걸 살 것이다. - 입력되는 값들 중 가장 싼 패키지 / 가장 싼 낱개 가격만 따로 저장 - 낱개 x 6이 패키지보다 싸다면 오직 낱개로만, 아니라면 패키지로 구매한 후 - 남은 사야 할 줄이 6개 이하일 때 패키지와 낱개 x 6 가격을 비교, 저렴한 걸 선택한다. 1. 알고리즘을 정리하여 2. 숫자에 맞춰 작성 이후 작성할 글이 있다면 추가 작성 코드 #include int mai..
[백준/C++] 1012번. 유기농 배추 문제 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 알고리즘 수업 초기에 풀었던 종류의 문제. - 입력에 맞춰 밭을 생성 - 모든 칸을 순회, 1인 경우 탐색을 진행 - 0이면 종료, 1이면 해당 칸을 2로 수정하고 반복. - 칸의 크기가 아닌 집합의 개수를 세야 하므로, 탐색이 끝난 후 전체 count를 1 증가시키는 식으로 작성 1. 각 입력에 따른 반복문 설정 2. 재귀 함수를 사용, 인접한 모든 1을 2로 칠하는 함수 작성 3. 모든 칸을 순회, 해당 칸이 1이라면 count를 ..
[백준/C++] 1065번. 한수 문제 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 1. 첫 번째 풀이 (마지막 풀이) 사고 과정 - 1부터 N까지 반복 - 자리수를 분리, 배열 등으로 저장 - 배열의 처음부터 끝까지 반복. [1]에서 [2]를 빼고 d에 저장해둔다. [2]에서 [3]을 뺀 수가 d와 다르다면 break, 끝까지 같다면 count를 1 증가 1. 1부터 N까지 반복 2. 자리수를 분리, 배열로 저장 3. 배열의 두 원소를 빼고, 공차를 캐싱 4. 연속해서 빼되, 공차와 다른 순간 종료 5. 끝까지 통과한 수의 개수를 세서 출력..
[백준/C++] 1032번. 명령 프롬프트 문제 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net 1. 첫 번째 풀이(마지막 풀이) 사고 과정 - 문제와 예제를 전부 읽어보았는데, *를 사용하는 경우는 아예 제외된 듯하다. 검색 결과만 나와있고 전체 파일은 없으니. - 핵심은 같은 글자는 그대로, 다른 글자는 ?로 처리하는 것. - 첫 파일을 배열에 넣어두고, 다른 파일들을 for문으로 하나씩 비교하며 다른 경우에만 바꾸면 될 것 같다. 심지어 파일 제목 길이까지 모두 같다. 1. N을 입력받음 2. 첫 파일을 배열에 입력받음(답안이 될 예정) 3..