'Backjoon' 태그의 글 목록 (4 Page)
본문 바로가기

Backjoon55

백준 2292_벌집[C++] 문제 풀이 이 문제는 둘러싸고 있는 육각형을 지나 최단거리를 찾는 문제이므로 육각형으로 이루어진 벌집에 있는 규칙을 찾아내면 쉽게 풀 수 있는 문제입니다. 그림에서 중앙에 1번 육각형이 있고 2~7번까지 육각형이 1을 둘러싸고 있습니다. 그리고 그 바깥을 8~19까지 둘러싸고 있으며, 그 바깥을 20~37.....이런식으로 둘러쌓여 있습니다. 여기서 2~7은 6개, 8~19는 12개, 20~37은 18개.... 6의 배수만큼 커지는 것을 알 수 있습니다. 이 원리를 이용하여 문제를 풀게 되면 A라는 숫자를 입력받게 되면 이 A는 1+6(n-1) n; for (int i = 0; i < n; i++) { room+=6*i; if(n 2022. 1. 24.
백준 1712_손익분기점[C++] 문제 풀이 이 문제는 손익분기점이 무엇인지를 알면 어렵지 않게 풀 수 있는 문제입니다 손익분기점이란 일정 기간 수익과 비용이 같아서 이익도 손해도 생기지 않는 경우의 매출액을 의미합니다. 즉 이 문제에서 고정비용 A와 1대를 생산하는데 드는 비용 B, 그리고 1대를 판매하는데 드는 비용 C가 있을 때 생산에 드는 비용을 모두 합쳤을 때 , N대 판매한 비용과 같아지는 지점이 손익분기점이 되는 것입니다. 정리하면 A+(B*생산 수)>=(C*생산 수) 일 때가 손익분기점입니다. 추가적으로 문제에서 손익분기점을 넘을 수 없는 경우가 생기는데 손익분기점을 넘을 수 없는 조건은 1대 생산 비용인 B가 1대 판매 비용인 C와 같거나 클 경우입니다. 이 경우에 생산 대수를 무한히 늘리더라도, 손익분기점을 절대 넘을 .. 2022. 1. 22.
백준 15596_정수 N개의 합[C++] 문제 풀이 이 문제는 각 언어에서 작성해야하는 함수를 참고하여 주어진 수에 대해 값을 더해주는 코드를 작성하면 되는 간단한 문제입니다. 소스코드 #include using namespace std; long long sum(vector &a){ long long ans=0; for (int i = 0; i < a.size(); i++) ans+= a.at(i); return ans; } 이렇게 작성하여 제출하면 정답이라고 나옵니다. 그러나 저는 올바르게 작성되었는지 확인하기위해 아래 함수를 작성하여 결과값이 20이 나오는 것을 확인하고 제출하였습니다. int main(){ long long ans; vector a; a.push_back(5); a.push_back(15); ans= sum(a); cout 2022. 1. 21.
백준 4673_셀프 넘버[C++] 문제 풀이 위의 문제에서 생성자를 구하는 방법은 다음과 같습니다. 만약 두 자리 수인 23이 있다면 계산식은 (현재 수+ 10의자리수+1의자리수)가 됩니다. 따라서 23으로 계산을 진행하면 23+2+3=28이 됩니다. 따라서 23은 28의 생성자가 됩니다. 여기서 이 공식으로 계산하였을 때 결과로 나오지 않는, 즉 생성자가 없는 수를 셀프넘버라고 합니다. 이 문제에서 주어진 조건은 10000아래의 수 중에서 셀프넘버인 숫자를 구하는 것이므로 크기가 10000인 배열을 생성해주고, 위의 공식대로 풀이를 진행하여 결과로 나오는 값에 해당하는 배열의 값을 1로 바꿔줍니다(위 과정을 통해 생성자가 있는 수라는 것을 나타냅니다). 이 과정을 10000보다 작을 때 까지 반복해주고, 값이 0인 배열을 출력해주면 됩.. 2022. 1. 20.
백준 1065_한수[C++] 문제 풀이 위의 문제를 보면 각 자리의 수가 등차수열을 이루는 수가 한수라고 설명이 되어있습니다. 예를 들어 1이면 비교 대상이 하나 뿐이므로 한수가 됩니다. 59이면 비교대상이 둘 뿐이라 한수가 됩니다. 따라서 99까지는 모든 수가 한수입니다. 그러나 100이상의 수의 경우 비교대상이 세가지 입니다. 따라서 이를 비교하여 등차수열을 이루는지를 알아보면 됩니다. 예를 들어 111의 경우 그대로 1이 3번 나오므로 등차수열을 이루고 있고 한수입니다. 123의 경우 100의 자리부터 1씩 커지기 때문에 한수입니다. 258의 경우 각 자리의 수가 3씩 커지기 때문에 등차수열을 이루고 있고 한수 입니다. 이 점을 이용하여 (100의 자리수 - 10의 자리수) == (10의 자리수 - 1의 자리수) 라는 것을 알.. 2022. 1. 19.
백준 10818_최소, 최대[C++] 문제 풀이 n개의 수를 입력받으면 입력받은 값을 비교하여 최소값과 최대값을 찾는 문제입니다. 이 문제는 입력받을 수의 개수를 먼저 입력받고, 그 수만큼 숫자를 입력받은 후 반복문과 조건문을 이용하여 배열의 n번째 수가 최대값 또는 최소값인지를 비교 후 조건이 성립하면 최대 또는 최소값을 변경해주면 되는 비교적 간단한 문제입니다. 소스코드 #include using namespace std; int main() { int n, max=-1000000, min=1000000; cin >> n; int array[n]; for ( int i = 0; i > array[i]; if(maxarray[i]) min=array[i]; } cout 2022. 1. 19.
백준 8958_OX퀴즈[C++] 문제 풀이 이 문제의 경우 80보다 작은 문자열을 입력받고 그 중에서 연속된 O의 점수만큼 채점을 하여 점수가 몇 점인지 출력하는 문제입니다. 여기서 연속된 O의 점수라는 것은 연속된 개수에 따라 점수가 늘어나는 것을 의미합니다. 예를들어 O 이면 1점, OO이면 1+2가되어 3점, OOO면 1+2+3=6점이 되는 것입니다. 예를 들어 OOXOXXOOO라는 문자열이 있을 경우 이 문자열에 대한 채점을 진행하면 (1+2) + 1 + (1+2+3) 이기 때문에 점수는 10점이 됩니다. 이 점을 생각하여 문제 해결 순서를 정리하면 다음과 같습니다. 1. 80이하의 문자열을 입력받습니다. 2. 반복문을 이용하여 문자열의 길이만큼 탐색해줍니다. 3. 탐색 과정에서 O를 만날 경우 O에 대한 점수를 1점 올려주고,.. 2022. 1. 18.
백준 4344_평균은 넘겠지[C++] 문제 풀이 이 문제를 정리하면 다음과 같습니다. 1. 테스트 케이스의 수를 받습니다. 2. 테스트 케이스 별 학생의 수와 각 학생들의 점수를 입력 받습니다. 3. 입력받은 점수의 평균을 구합니다. 4. 입력받은 학생들의 점수와 평균 값을 비교한 후 평균을 넘는 학생이 몇명인지를 구합니다. 5. 입력받은 학생의 수 대비 평균을 넘는 학생의 수가 몇 퍼센트인지를 출력합니다. 6. 테스트 케이스의 수만큼 반복해 줍니다. 이 과정을 수행하기 위해 먼저 케이스 수를 입력받고, 입력받은 케이스의 수에서 학생의 수를 입력받고 그 수만큼 점수를 넣을 수 있는 배열을 생성해줍니다. 그 다음 점수를 입력 받으면서 더해주어 총점을 구해줍니다. 구해놓은 총점을 이용하여 평균값을 도출하고, 아까 점수를 입력받은 배열의 값과 평.. 2022. 1. 17.
백준 3052_나머지[C++] 문제 풀이 입력값을 42로 나누고, 나눈 숫자 중 다른 숫자가 몇개 있는지를 출력하는 문제입니다. 42로 나눈 후의 나머지 값을 저장하기위한 크기가 10인 배열을 이용하여 문제를 해결해주면 됩니다. 이중 for문을 이용하여 각 입력값을 비교한 후 중복 되는 수가 있으면 10개의 수에서 1씩 감소 시키면 for문이 모두 동작한 후에 다른 수가 몇개인지가 남게 되고, 그 값을 출력하는 방식으로 문제 풀이를 진행해주면 됩니다. 소스코드 #include using namespace std; int main() { int array[10], value=10; for (int i = 0; i > array[i]; array[i]= array[i]%42; } for (int i = 0.. 2022. 1. 17.