목록전체 글 (159)
Priceless

그리디 알고리즘 문제는 코드 자체가 길진 않았다 다만 어떻게 구현해서 정확한 값을 도출할 지가 관건이다 DFS, BFS 에 대한 스터디를 진행하지 않아 조금 찾아보고 풀어 본 문제 두 수를 입력 받고 n을 m으로 바꾸기 위해 가능한 연산은 두 가지 2를 곱하거나 ,1을 수의 가장 오른 쪽에 추가한다 이 말은 즉 곱하기 10 더하기 1이다 처음에는 n을 m으로 바꿀 방법을 모색하다가 경우의 수를 둬서 풀었을 때 while 문 두 번에 시간 초과가 뜰 것 같아 m에서 n을 접근하는 방법으로 변경했다 위 두 가지 연산을 반대로 하면 2를 나누거나, 10을 나누는 것이다 10을 먼저 나누는 것이 변경 횟수가 줄어드므로 10을 먼저 나눈 후, 2를 나눌 수 있는지 여부를 확인한다 만약 두 수로 나눌 수 없거나 애..

체스에서 나이트의 움직임을 오른쪽으로만 움직였을 때 입력 받은 체스판에서 최대한의 이동하는 칸의 수를 구하는 문제다 체스판이 작을 때 이동 횟수에 대한 제한 있기 때문에 그 부분에 대해서 하나씩 조건을 걸어야 한다 체스판이 커지면 최대로 갈 수 있는 칸을 세기 위해 계산한다 자세한 계산 수는 코드를 참고한다 // baekjoon 1783 #include #include #include using namespace std; // codes for fast I/O void init(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); } int main(){ init(); int n, m; cin >> n >> m; if(n == 1){ cout

특별한 예외 처리가 필요할 줄 알았지만 생각보다 너무 쉬워서 빨리 해결할 수 있었다 개수가 적은 수를 바꿔야 하므로 값이 바뀌는 횟수를 세고 난 후 절반을 나누면 된다 // baekjoon 1439 #include #include #include using namespace std; // codes for fast I/O void init(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); } int main(){ init(); string input; cin >> input; int temp = input[0]; int n = input.length(); int switching = 0; for(int i = 1; i < n; i++){ if ..