목록분류 전체보기 (114)
승코딩당당당
문제[C++] 백준 1074: Z GOLD 5https://www.acmicpc.net/problem/1074 접근 방법2^N × 2^N 크기의 배열을 Z 모양으로 방문할 때, 좌표 (r, c)가 몇 번째로 방문되는지 출력하는 문제다.Z 방문의 핵심 규칙은 다음과 같다.큰 정사각형을 4등분(사분면) 한다.방문 순서는 항상 고정:왼쪽 위(0) → 오른쪽 위(1) → 왼쪽 아래(2) → 오른쪽 아래(3)목표 좌표 (r, c)가 속한 사분면만 재귀로 내려가고,목표 좌표가 없는 사분면은 그 사분면의 칸 수만큼을 한 번에 건너뛴다.즉, “전부를 방문하면서 세는” 게 아니라“필요 없는 구역은 통째로 스킵하면서 누적값(sum)만 올리는 방식” 으로 풀어야 시간 초과가 안 난다. 처음에 벡터를 다 채웠는데 메모리 초..
문제[C++] 백준 10431: 줄세우기 SILVER 5https://www.acmicpc.net/problem/10431 접근 방법이 문제는 학생들의 키를 앞에서부터 한 명씩 줄 세울 때,뒤로 물러나는 횟수(이동 횟수)의 총합을 구하는 구현 문제이다. 학생을 한 명씩 입력받으면서, 현재까지 정렬된 줄(students)에 올바른 위치에 삽입하는 방식으로 시뮬레이션했다.현재 학생 키 now를 받으면앞에서부터 탐색하며 now보다 큰 키를 처음 만나는 위치 j를 찾고그 위치 뒤의 학생들을 한 칸씩 밀어 공간을 만든 뒤 now를 삽입한다이때 밀린 횟수는 (i - j)만큼이므로, 이를 누적해 cnt에 더한다만약 끝까지 탐색해도 더 큰 값이 없다면, 맨 뒤에 그대로 붙이면 된다. 구현 시 주의할 점앞에서부터 탐색..
문제[C++] 백준 9655: 돌 게임 SILVER 5https://www.acmicpc.net/problem/9655 접근 방법이 문제는 돌을 1개 또는 3개씩 가져갈 수 있을 때,누가 이기는지(SK / CY) 를 판단하는 게임 문제이다. 처음에는 규칙을 직접 몇 개 적어보며 확인했고,그 결과 돌의 개수가 홀수면 SK, 짝수면 CY가 이긴다는 패턴을 발견했다.그래서 실제로는 홀짝 판단만으로도 문제를 해결할 수 있었다. DP 알고리즘을 활용한 풀이2DP(동적 계획법) 풀이로도 풀 수 있을 것 같은데,아직 DP 구현이 어려워서 다른 사람의 블로그를 참고하여 함께 확인해보았다.(참고 블로그: https://beginnerdeveloper-lit.tistory.com/83) DP 공부를 열심히 해보자.....
문제[C++] 백준 11723: 집합 SILVER 5https://www.acmicpc.net/problem/11723 접근 방법이 문제는 1부터 20까지의 숫자로 이루어진 집합 S에 대해 여러 가지 연산을 수행하는 문제이다. 집합의 크기가 최대 20으로 고정되어 있으므로,각 원소의 존재 여부를 bool 배열로 관리하면 간단하게 처리할 수 있다. 명령어에 따라 다음과 같이 동작한다.add x : x를 집합에 추가 → trueremove x : x를 집합에서 제거 → falsecheck x : x가 있으면(true) 1, 없으면(false) 0 출력toggle x : x가 있으면 제거, 없으면 추가all : 1부터 20까지 모두 포함 → 모두 trueempty : 집합을 비움 → 모두 false문자열로 ..
문제[C++] 백준 2816: 디지털 티비 BRONZE 1https://www.acmicpc.net/problem/2816 접근 방법이 문제는 TV 채널 목록이 주어졌을 때,리모컨 버튼 조작을 통해 KBS1을 0번 위치, KBS2를 1번 위치로 옮기는 문제이다. 또한 이 문제는 스페셜 저지(Special Judge) 문제이므로,정답이 하나로 고정되어 있지 않고 여러가지 답이 허용된다. 처음에 스페셜 저지 문제가 뭔지 몰라서 모든 조작 방법을 다 고려해 구현하다 보니 시간이 많이 소요됐다.... 그래서 가능한 버튼 중에서도 1번(아래로 이동) 과 4번(위 채널과 교환) 만 사용해서 풀 수 있도록 구현했다. 방법은 시뮬레이션 방식이다.화살표를 아래로 이동(버튼 1 출력)하면서 "KBS1"의 위치를 찾는다...
문제[C++] 백준 1157: 단어 공부 BRONZE 1https://www.acmicpc.net/problem/1157 접근 방법이 문제는 단어가 주어졌을 때 가장 많이 사용된 알파벳을 출력하는 문제이다.대소문자는 구분하지 않으므로 먼저 모든 문자를 대문자로 통일한다. 각 문자를 하나씩 확인하면서,해당 문자의 아스키 코드 값을 인덱스로 사용해 배열에 등장 횟수를 저장한다.문자 'A', 'B', 'C' … 는 내부적으로 각각 고유한 아스키 코드 값을 가지므로문자 자체를 int로 변환해 배열의 인덱스로 사용하면 알파벳별 등장 횟수를 쉽게 관리할 수 있다. 이후 배열을 순회하며 가장 큰 빈도를 가진 인덱스를 찾고,해당 빈도가 유일한지 여부를 확인한다.최댓값이 하나뿐이면 → 해당 인덱스를 다시 문자로 변환해..
문제[C++] 백준 1927: 최소 힙 SILVER 2https://www.acmicpc.net/problem/1927 접근 방법이 문제는 수를 입력받아 최소값을 빠르게 출력하고 제거해야 하는 문제이다. 일반적인 배열이나 벡터를 사용하면 매번 정렬이 필요해 비효율적이므로,우선순위 큐(priority_queue) 를 사용하는 것이 적절하다. C++의 priority_queue는 기본적으로 최대 힙(max heap) 구조이지만,비교 함수를 변경하면 최소 힙(min heap) 으로 사용할 수 있다.priority_queue heap; // 최대 힙priority_queue, greater> heap; // 최소 힙 int : 저장할 자료형vector : 내부 컨테이너greater : 작은 값이 우선되도록..
문제[C++] 백준 2292: 벌집 BRONZE 2https://www.acmicpc.net/problem/2292 접근 방법이 문제는 벌집 모양으로 숫자가 증가할 때,주어진 숫자 n이 몇 번째 껍질(층) 에 속하는지를 구하는 문제이다. 먼저 직접 숫자들의 범위를 나열해보면 다음과 같은 규칙을 확인할 수 있다.12 ~ 78 ~ 1920 ~ 3738 ~ 61 각 층이 커질수록 증가하는 칸의 개수는 6의 배수로 증가한다는 패턴이 있다.16 1218241층: 12층: 1 + 6×13층: 1 + 6×1 + 6×24층: 1 + 6×1 + 6×2 + 6×3 …즉, 이런 방식으로 이전 범위의 끝값에 6 × i를 더해가며 범위를 확장하면 된다. 코드에서는 각 층의 마지막 숫자를 벡터에 저장하고 n이 해당 범위 안에 ..
문제[C++] 백준 5073: 삼각형과 세 변 BRONZE 3https://www.acmicpc.net/problem/5073 접근 방법이 문제는 세 변의 길이가 주어졌을 때 해당 삼각형이 유효한지, 그리고 어떤 삼각형 종류인지 판별하는 문제이다. 먼저 세 변을 배열에 저장한 뒤 오름차순으로 정렬한다.정렬을 하면 가장 긴 변이 항상 마지막에 위치하므로, 삼각형의 성립 조건을 간단하게 확인할 수 있다. 정렬 후,가장 긴 변 ≥ 나머지 두 변의 합 → Invalid세 변이 모두 같으면 → Equilateral세 변이 모두 다르면 → Scalene위 두 경우가 아니면 → Isosceles와 같은 순서로 판별한다. 구현 시 주의할 점sort 함수를 배열에 사용할 때는sort(배열, 배열 + 원소 개수) 형태로..
문제[C++] 백준 23971: ZOAC 4 BRONZE 3https://www.acmicpc.net/problem/23971 접근 방법이 문제는 강의실의 크기와 거리 제한이 주어졌을 때 사람을 최대로 배치할 수 있는 개수를 구하는 문제이다. 처음에는 2차원 벡터를 선언한 뒤,사람을 앉힐 수 있는 위치에만 표시하면서 하나씩 카운팅하는 방식으로 접근했다.하지만 이 방법은 불필요한 반복이 많아 시간 초과로 계속 실패했다. 곰곰이 생각해보니 굳이 모든 좌석을 직접 확인할 필요가 없었고,행과 열 각각에서 앉을 수 있는 개수를 공식으로 계산하면 되는 문제였다. 세로 방향에서는 (n+1)칸마다 한 명,가로 방향에서는 (m+1)칸마다 한 명씩 앉을 수 있으므로각각 ceil(h / (n+1)), ceil(w / (m..