목록2025/12 (13)
승코딩당당당
문제[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..
문제[C++] 백준 1253: 좋다 GOLD 4https://www.acmicpc.net/problem/1253 접근 방법이 문제는 주어진 수열에서 어떤 수가 다른 두 수의 합으로 표현될 수 있는지를 판단하는 문제이다. 모든 수에 대해 두 수의 합을 일일이 비교하면 시간 초과가 발생할 수 있으므로,수열을 정렬한 뒤 투 포인터(Two Pointer) 기법을 사용한다. 각 원소 vect[i]를 목표 값으로 두고, 양쪽 끝에서 시작하는 두 포인터를 이동시키며vect[start] + vect[end]가 목표 값과 같은지 확인한다. 구현 시 주의할 점투 포인터를 사용하려면 반드시 수열을 정렬해야 한다. 두 수의 합을 구할 때 현재 찾고 있는 수(vect[i])가 덧셈에 포함되면 안 되므로, start == i ..