본문 바로가기

Algorithm/🏫assignment18

# Interesting Gain # 문제 # 입력 및 출력 # 풀이 처음엔 r, l 의 값을 구해야 할 줄 알았는데 그냥 max1, max2, min1, min2 값만 구하면 되는 문제였다. 그래서 그냥 정렬해서 풀었다. #include #include using namespace std; ifstream fin("gain.inp"); ofstream fout("gain.out"); int main() { int t, n, gain; int arr[100001]; fin >> t; while (t--) { fin >> n; for (int i = 0; i > arr[i]; } sort(arr, arr + n); gain = arr[n - 1] + arr[n - 2] - arr[0] - arr[1]; fout 2022. 9. 11.
# 계단 오르기 # 문제 # 입력 및 출력 # 풀이 아직도 맞게 푼 건지 잘 모르겠다.. 일단 대충 규칙은 생각이 났는데 예외 부분이 너무 많아서 정리만 다섯 번 한 것 같다. 1. 맨 마지막엔 1층부터 F층까지 올라야 함 → N-=(F-1) 2. 엘리베이터 타는 횟수를 최소로 만들기 위해 한 번 오를 때 N을 최대로 줄일 수 있는 '1층부터 M층까지 오르기' 반복 cnt = N/(M-1) remain = N%(M-1) 3. 처음 시작 점 즉 F가 1이 아니고 remain이 0이면 cnt++ 4. remain 값이 0이 아니면 일단 cnt++, remain 값이 0이 아니고 F+remain > M 이면 cnt++ 3번 조건이 필요한 이유는 F가 1이 아니면 2번을 반복하기 위해 1층으로 가야하기 때문이다. 여기서 rem.. 2022. 9. 9.
# Spin And Slide # 문제 # 입력 및 출력 # 풀이 처음 입력받은 게임판: char board[100][100] 오른쪽으로 90도 한 번 회전한 게임판: char spin[100][100] 아래쪽으로 미는 동작을 수행한 게임판의 한 컬럼: deque slide - spin 동작 오른쪽으로 90도 회전시키는 동작은 좌표를 보면 이해하기 쉽다. 위 그림처럼 회전시 좌표의 변경 규칙을 찾아보자. spin[i][j] = board[N-j-1][i] 위와 같은 규칙이 된다. 따라서 spin은 좌표만으로 해결이 가능하다. - slide 동작 queue 대신 deque를 사용한 이유는 .이 들어왔을때는 앞으로 보내고 색깔이 들어왔을 땐 뒤에다 push 해야하기 때문이다. queue를 사용해도 되긴 하지만 queue는 한 번 전부 p.. 2022. 9. 4.
# Test # 문제 # 입력 및 출력 제한조건: 프로그램의 이름은 test.{c,cpp,java}로 한다. # 풀이 #include #include #include #include #include using namespace std; ifstream fin("test.inp"); ofstream fout("test.out"); map last_name; tuple person[1000]; bool compare(tuple a, tuple b) { return get(a) > n; for (int i = 0; i > sid >> first >> la.. 2022. 9. 3.
# Bowling 점수 계산하기 # 문제 # 입력 및 출력 # 풀이 #include #include using namespace std; ifstream fin("bowling.inp"); ofstream fout("bowling.out"); int input(int frame[10][2]) { int bonus = 0; for (int i = 0; i > frame[i][0]; if (frame[i][0] == 10)continue; fin >> frame[i][1]; } fin >> frame[9][0] >> frame[9][1]; if (frame[9][0] + frame[9][1] >= 10) fin >> bonus; return bonus; } int strike(int frame[10][2],i.. 2022. 7. 9.
# 교차점 계산 # 문제 # 풀이 각각 N회 반복하는 이중 for문을 생각하면 최대 1억회 반복하게 된다 T의 범위는 나와있지 않아 T까지 포함한 시간 복잡도는 잘 모르겠지만 N이 최대 10,000이기 때문에 O(N^2) = 1억회 즉, 대략 1초 시간 제한이 따로 안나와있어서 일단 이 방법으로 해결했음 #include #include using namespace std; int first[10000]; int second[10000]; ifstream fin("cross.inp"); ofstream fout("cross.out"); int main() { int T, N, num; fin >> T; for (int i = 1; i > N; for (int j = 0; j > first[j];.. 2022. 7. 4.