Algorithm159 # 계단 오르기 # 문제 # 입력 및 출력 # 풀이 아직도 맞게 푼 건지 잘 모르겠다.. 일단 대충 규칙은 생각이 났는데 예외 부분이 너무 많아서 정리만 다섯 번 한 것 같다. 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. #9465 스티커 # 문제 # 입력 및 출력 # 풀이 처음에 풀었을 땐 접근 자체는 나쁘지 않았다고 보는데 코드가 엉터리였다 선택을 하지 않았을때를 따로 빼서 max 값을 구하도록 했는데 모든 케이스를 조회하지 못해 틀렸다 내 힘으로 풀고 싶어서 며칠 뒤에 다시 풀었다 i-1번째 열에서 선택한 행과 i번째 열에서 선택한 행을 쌍을 지어 생각하다 보니 해결할 수 있었다 i번째 열에서 첫 번째 행을 선택한 경우 i-1번째 열에서 선택하지 않은 경우와 두 번째 행을 선택한 경우의 max값을 구하고 이것을 계속 반복하면 된다 그리고 dp[n]은 모든 케이스의 max 값을 모아둔 경우기 때문에 여기서 max값을 구하면 최종 결과값이 된다 #include #include using namespace std; int dp[100001.. 2022. 8. 14. #11051 이항 계수 2 # 문제 # 입력 및 출력 # 풀이 처음에 풀었던 방법이 하나하나 계산해주는 방법이었다 // 틀린 풀이 #include using namespace std; int com[1001] = { 1, }; int main() { int n, k; cin >> n >> k; int t = n, b = 1; for (int i = 1; i > k; for (int i = 1; i 2022. 8. 12. #3036 링 # 문제 # 입력 및 출력 # 풀이 기약 분수 형태로 출력해야 하기 때문에 최대공약수를 구해야 한다 최대 공약수를 구하기 위해 유클리드 호제법을 사용했음 https://kangworld.tistory.com/184 [코딩 팁] 최대공약수 : 유클리드 호제법 원리 ✍️ 최대공약수와 유클리드 호제법 코딩 테스트에서 심심치 않게 등장하는 최대공약수 구하기 2부터 시작하는 반복문으로 구할 수 있지만 유클리드 호제법을 사용하면 보다 효율적으로 구할 kangworld.tistory.com 위 블로그 참고 #include using namespace std; int gcd(int first, int r) { int b, s, mod; if (first < r) b = r, s = first; else b = firs.. 2022. 8. 10. 이전 1 ··· 4 5 6 7 8 9 10 ··· 27 다음