Algorithm/Softeer(9)
-
[HSAT 5회 정기 코딩 인증평가 기출] 성적 평가
풀이 정렬 알고리즘의 응용 문제였다. 구현의 핵심은 역순 정렬 후 중복되는 값을 처리하는 로직이었는데, 처음에 count 함수를 사용해서 중복처리 로직설계를 진행하였다가 시간초과가 발생하였다. 이후에 rank라는 포인터를 지정 후 이를 사용하여 중복되는 숫자에 대해 처리를 해주니 시간초과 문제가 해결되었다. #include #include #include using namespace std; int N; vector vec[4]; int order[4][100001]; int main(int argc, char** argv) { cin >> N; for (int i = 0; i > score; vec[..
2024.03.20 -
[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트
풀이 연비의 중앙값을 이분탐색을 통해 구하여 경우의 수를 계산해주면 되는 간단한 문제였다. 우선 중앙값을 먼저 이분탐색을 통해 찾아준다. 이때 인덱스를 얻어야 하기 위해 lower_bound를 사용하며, 마지막에 첫번째 반복자를 빼줌으로써 인덱스를 얻는다. 이후 중앙값이 되는 가짓수를 계산하는 방법으로 중앙값 기준으로 (왼쪽 요소의 수 * 오른쪽 요소의 수)를 곱해주면 모든 경우의 수를 구할 수 있었다. #include #include #include using namespace std; int n,q; vector vec,m; int main(int argc, char** argv) { cin>>n>>q; vec.resize(n); m.resize(q); for(int i=0;i>vec[i]; } so..
2024.03.20 -
[HSAT 7회 정기 코딩 인증평가 기출] 순서대로 방문하기
풀이 dfs, 백트래킹 문제였다. 특정 칸을 반드시 지나면서 한번 방문한 지역에 대해서는 다시 방문하지 않는 로직을 작성하는 것을 잘 하지 못하여 해설을 보고 문제를 풀게 되었다. dfs에서 모든 칸을 돌며 꼭 방문해야 하는 칸에 도착하게 되면 인덱스를 사용하여 증가를 시켜주는 로직으로 구현하였다. 만약에 인덱스가 마지막 칸을 의미하는 인덱스가 된다면 모든 방문해야 되는 칸을 방문 후 마지막 방문해야 하는 칸에 도착한 것이라 판단하여 정답 변수에 1을 증가시켜 주는 로직이다. #include #include using namespace std; int N,M,ans; int arr[5][5]; bool visited[5][5]; vector vec; int dr[4] = {0,0,1,-1}; int dc..
2024.03.20