BOJ - 생일 5635
·
코딩테스트
해결방법문제의 핵심은 나이를 어떻게 비교하고, 그 나이와 이름을 어떻게 매칭하는가이다.나의 경우에는 나이와 이름을 구조체를 이용하여 매치시켰다. 나이를 정렬하는 방법은 sort()메서드를 이용하였다. sort() 메서드는 시작점, 끝점, 비교함수를 매개변수로 이용한다.이 코드에서는 비교함수로[=](const student& a, const student& b) { if (a.yyyy == b.yyyy) { if (a.mm != b.mm) return a.mm > b.mm; else return a.dd > b.dd; } return a.yyyy > b.yyyy; });가 사용되었다. 한번 자세히 알아보자. 값의 비교를 위해 사용하는 람다함수의 매개변수는 a..
BOJ - 자작나무가 없소~ 31496
·
코딩테스트
해결방법입력되는 단어에서 특정 단어(예 : stone)가 포함되어 있는지를 파악해야 한다. 이 특정 단어는 _로 구분되어 있다면 해당하는 단어이지만(stone_axe 등등), 어떤 단어에 포함되는 경우에는 해당하지 않는다(flintstone 등등). 두번째 줄부터 아이템의 이름과 수량이 입력되는데, 이때 입력되는 문자열을 StringStream을 이용하여 입력 스트림처럼 변환해주었다.그다음으로 활용하는 것은 getline 메서드인데, 코드를 보면 ss, 즉 우리가 입력받은 아이템의 스트림을 word에 저장하는데, _가 나올때까지 읽어들인다는 의미이다.즉, stone이 우리가 찾는 이름이고, star_shape_stained_stone이 입력받은 단어라면, star, shape, stained, stone..
BOJ - 행렬 곱셈 2740
·
코딩테스트
해결방법먼저 동적으로 이차원 배열을 입력받아야 하기 때문에 이차원 벡터를 선언해줘야 한다.행렬을 입력받는것은 쉬우니 생략한다.행렬 곱을 하는 과정은 다음과 같다. 첫번째 행렬의 첫 번째 행의 숫자를 두번 째 행렬의 첫번째 열의 모든 숫자들과 곱하고 그 값을 더해준다. 행렬은 다음처럼 계산이 진행된다.따라서 우리가 해줘야 할 것은 행렬 곱의 크기인 N*K 사이즈의 배열을 만들고, 위의 그림처럼 각 배열마다 하나씩 연산을 더해주는 부분이다. 정답 코드#include #include using namespace std;int main(){ int N, M; cin >> N >> M; vector> A(N, vector(M)); for (int i = 0; i > A[i][j]; } } int C, K; ci..
BOJ - 연도 진행바 1340
·
코딩테스트
해결방법먼저 monthDay 배열을 보면, 각 월의 날수를 배열로 저장했음을 알 수 있다.나중에 map을 통해 월을 입력받으면 그 월을 숫자로 변환하여 monthDay의 숫자를 사용하는 방식으로 활용한다. YearPassed 함수는 윤년을 확인하는 함수로, 연도를 4로 나눠서 0이거나 100으로 나눠서 0은 아닌데 400으로는 0이 된다면 윤년이 되는 방식이다. monthLeft 함수는 입력된 월 이전까지의 누적일수를 구하는 함수이다. 예를 들어 May가 입력되었다면 4월까지의 일수를 구하게 된다. 여기에 만약 윤년인 경우 1일을 추가하는 방식으로 계산한다. 나머지 입력을 받는 부분과 진행도를 계산하는 것은 매우 간단하니 넘어가도록 하겠다. 정답 코드#include #include #include #in..
BOJ - 나무 조각 2947
·
코딩테스트
해결방법버블 정렬의 일종이라고 생각하면 쉽게 풀 수 있다.맨 앞에서부터 바로 옆의 숫자와 비교하고 교환하는 식으로 생각하면 편하다. 정답 코드#include using namespace std;void printArray(int arr[], int size){ for (int i = 0; i > arr[i]; } while (true) { bool Swap = false; for (int i = 0; i arr[i + 1]) { swap(arr[i], arr[i + 1]); Swap = true; printArray(arr, 5); } ..
BOJ - TV 크기 1297
·
코딩테스트
해결방법대각선이란 피타고라스 정리를 이용하여 그 값을 구할수 있다. 여기서는 비율을 알고 있기 때문에 비율을 가지고 대각선의 비율을 구할 수 있다. 그 값을 이용하여 실제 높이와 너비를 구하면 된다.또한 floor 함수를 이용하여 소수점이 나온다면 버림을 해준다. 정답 코드#include #include using namespace std;int main(){ int D, H, W; cin >> D >> H >> W; double scale = D / sqrt(H * H + W * W); int Height = floor(H * scale); int Width = floor(W * scale); cout