문제풀이/BOJ
[C++ 백준] 10250 ACM 호텔
[C++ 백준] 10250 ACM 호텔
2021.05.29블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 각 층에 W개의 방이 있는 H층 건물이라고 가정하고, 엘리베이터는 가장 왼쪽에 있다고 가정한다. 이때, 모든 손님은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다. 단, 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않으며, 걷는 거리가 같을 시에는 아래층의 방을 더 선호한다. 테스트 케이스 t개에 대하여 H, W, N을 입력받고, N번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램을 작성하시오. (1 h >> w >> n; int h1; int w1; w1 = (n / h); h1 = n % h; if (h1 > 0) ++w1; else h1 = h; cout
[C++ 백준] 2941 크로아티아 알파벳
[C++ 백준] 2941 크로아티아 알파벳
2021.05.28블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력하는 프로그램을 작성하시오. (단, dž 는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.) 풀이 전략 크로아티아 알파벳으로 변경되는 string을 선언해두고 해당 스트링이 있다면 길이가 1인 다른 스트링으로 변환시킨다. 변환된 스트링 길이 출력 소스 코드 #include #include // 크로아티아 알파벳 using namespace std; int main() { string str; cin >> str; int idx; string arr[8] = { "c=..
[C++ 백준] 2869 달팽이는 올라가고 싶다
[C++ 백준] 2869 달팽이는 올라가고 싶다
2021.05.27블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 높이가 V미터인 나무 막대를 올라가는 달팽이는 낮에 A미터 올라갈 수 있고, 밤에 잠을 자는 동안 B미터 미끄러진다. 단, 정상에 올라간 후에는 미끄러지지 않는다. (1 b >> v; cout
[C++ 백준] 2839 설탕 배달
[C++ 백준] 2839 설탕 배달
2021.05.26블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 설탕을 정확하게 N킬로그램 배달하려고 한다. 5킬로그램 봉지와 3킬로그램 봉지가 있을 때, 최대한 적은 봉지를 들고 가려고 한다. N킬로그램 배달 시 봉지를 몇 개 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. (1 n; int isResult = -1; int max = n / 5; for (int i = max; i >= 0 ; --i) { int calc = n - ( i * 5 ); if ((calc % 3) == 0) { isResult = i + (calc / 3); break; } } cout
[C++ 백준] 2292 벌집
[C++ 백준] 2292 벌집
2021.05.25블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여) 계산하는 프로그램을 작성하시오. (ex. 13 -> 3개, 58 -> 5개) 첫째줄에 N(1
[C++ 백준] 1085 직사각형에서 탈출
[C++ 백준] 1085 직사각형에서 탈출
2021.05.24블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 이때, 임의의 점 (x, y)에서 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. 첫째줄에 x, y, w, h가 주어진다. 풀이 전략 입력받은 값들을 비교해서 최솟값을 출력 소스 코드 #include using namespace std; int main() { int x, y, w, h; cin >> x >> y >> w >> h; int x1 = w - x; int y1 = h - y; x1 = x >= x1 ? x1 : x; y1 = y >= y1 ? y1 : y; if (x1 > y1) cout
[C++ 백준] 2775 부녀회장이 될테야
[C++ 백준] 2775 부녀회장이 될테야
2021.05.23블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 a층의 b호에 살려면 (a-1) 층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다는 규칙이 있다. 첫째줄에 테스트 케이스의 수 t가 주어지며, 각각의 케이스마다 k층의 n호에는 몇 명이 살고 있는지 구하는 프로그램을 작성하시오. (단, 아파트는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.) 풀이 전략 k층의 n호는 k-1층의 n호와 k층의 n-1호의 합과 같다. 0층일 경우 n호에 n명 살고 있으므로 n을 리턴 소스 코드 #include using namespace std; int GetCount(int k, int n) { if (n == 1) return 1; if (k == 0)..
[C++ 백준] 1193 분수 찾기
[C++ 백준] 1193 분수 찾기
2021.05.22블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 나열된 분수들을 1/1->1/2->2/1->3/1->2/2->... 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, ... 분수라고 한다. 첫째 줄에 X(1 x; int i = 0; while (x > 0) { ++i; x -= i; } if (i % 2 == 1) cout
[C++ 백준] 1152 단어의 개수
[C++ 백준] 1152 단어의 개수
2021.05.18블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. (이 문자열의 길이는 1,000,000을 넘지 않는다.) 단어는 띄어쓰기 한 개로 구분되며, 문자열의 앞과 뒤에는 공백이 있을 수도 있다. 단어의 개수를 출력하는 프로그램을 작성하시오. (단, 한 단어가 여러 번 등장하면 모두 세어야 한다.) 풀이 전략 띄어쓰기 입력을 받기 위해 getline() 사용 공백을 기준으로 새 단어가 나왔을 때 카운트 증가 소스 코드 #include #include using namespace std; int main() { int result = 0; bool flag = false; string str; getline(cin, str); ..
[C++ 백준] 1316 그룹 단어 체커
[C++ 백준] 1316 그룹 단어 체커
2021.05.16블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 그룹 단어: 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우 ex) ccazzzzbb -> 그룹 단어, kin -> 그룹 단어, aabbbccb -> 그룹 단어 아님 단어 N개를 입력받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. (단, N > count; for (int i = 0; i > str; if (IsCheak(str)) ++result; } cout
[C++ 백준] 2908 상수
[C++ 백준] 2908 상수
2021.05.15블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 수를 거꾸로 읽었을 때(ex.734, 893 -> 437, 398), 큰 수를 출력하는 프로그램을 작성하시오. (두 수는 같지 않은 세 자릿수이며, 0이 포함되어 있지 않다.) 풀이 전략 두 수 비교 시 끝에 자릿수부터 비교 출력 시 뒤에서부터 앞으로 출력 소스 코드 #include #include using namespace std; int main() { string a, b, result; cin >> a >> b; for (int i = 2; i>=0;i--) { if (a[i] == b[i]) continue; if (a[i] > b[i]) result = a; else result = b; break; } cout
[C++ 백준] 5622 다이얼
[C++ 백준] 5622 다이얼
2021.05.14블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 전화를 걸 때, 숫자 1은 2초의 시간이 필요하며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 추가된다. 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. (단어의 길이는 2보다 크거나 같고, 15보다 적거나 같다.) 각 문자를 숫자에 대응했을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오. 풀이 전략 각 문자가 입력받는데 걸리는 시간을 배열에 저장 후 계산 소스 코드 #include #include using namespace std; int main() { int times[] = { 3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10 }; int..