문제https://www.acmicpc.net/problem/1459 풀이2 * W가 S보다 작거나 같다면, 대각선 이동을 하지 않고 직선 이동만 해서 집에 도달하는 것이 가장 적은 시간이 걸린다. 그러나 2 * W가 S보다 크다면 상황이 약간 복잡해진다.나는 크게 세 가지 경우로 나누어 생각했다.대각선으로만 이동 가능한 경우대각선으로 최대한 이동 후, 직선으로 한 번만 이동하는 경우대각선, 직선 이동을 섞어야 하는 경우1. 대각선으로만 이동 가능한 경우(X, Y) 좌표의 합이 짝수라면, 대각선으로만 이동하며 집에 도착할 수 있다.이 경우 걸린 시간은 S * max(X, Y)가 된다.2. 대각선으로 최대한 이동 후, 직선으로 한 번만 이동하는 경우(X, Y) 좌표의 합이 홀수라면, 즉 X와 Y 중 하나는..
문제https://www.acmicpc.net/problem/9440 풀이주어진 숫자를 오름차순으로 정렬한 후, 앞에서부터 하나씩 순서대로 num1과 num2로 나누어주었다.예를 들어 [3, 4, 2, 2, 2, 2]가 주어졌을때 오름차순으로 정렬하면 [2, 2, 2, 2, 3, 4]이고, 앞에서부터 하나씩 num1과 num2로 나누어준다면 결과는 다음과 같다.num1 = [2, 2, 3]num2 = [2, 2, 4]따라서 정답은 223 + 224 = 447이다. 이때 주어진 숫자에 0이 포함된 경우, 두 정수는 0으로 시작하면 안된다는 것에 유의해야 한다.예를 들어 [0, 1, 2, 3, 4, 0, 1, 2, 3]이 주어졌다면, 오름차순으로 정렬 시 [0, 0, 1, 1, 2, 2, 3, 3, 4]이고..
문제https://www.acmicpc.net/problem/7774 풀이콘센트 - 첫 번째 멀티탭 - 두 번째 멀티탭 - 첫 번째 멀티탭 - 두 번째 멀티탭 ...이렇게 반복해서 꽂을 수 있다는 점에 유의해야 한다. 우선 첫 번째 멀티탭과 두 번째 멀티탭을 콘센트 개수를 기준으로 정렬한다.첫 번째 멀티탭 중 가장 많은 콘센트를 가지고 있는 멀티탭을 콘센트에 꽂고, 그 콘센트 개수만큼 두 번째 멀티탭을 선택해서 꽂는다(이 때도 가장 많은 콘센트를 가지고 있는 멀티탭부터 선택).만약 첫 번째 멀티탭과 두 번째 멀티탭이 각각 한 개 이상 남았다면, 또다시 꽂을 수 있으므로 위의 과정을 반복한다.n, m = map(int, input().split())a = list(map(int, input().split(..
문제https://www.acmicpc.net/problem/1339 풀이ABC + CE= (A*100 + B*10 + C) + (C*10 + D)= A*100 + B*10 + C*11 + D 이렇게 나타낼 수 있다는 점에 집중해서 문제를 풀었다.각 문자가 위치한 자리수들을 저장해놓은 후, 자리수 기준으로 정렬을 하고 큰 자리수를 가지는 문자에 큰 수를 할당하는 방식으로 풀었다. 위의 예에서는 [A:100, C:11, B:10, D] 순으로 큰 자리수를 가지고 있으므로, A=9, C=8, B=7, D=6을 할당하면 그 합을 가장 크게 만들 수 있게 된다.N = int(input())words = []for _ in range(N) : words.append(input())word_dic = {}for ..
문제https://www.acmicpc.net/problem/17245 풀이첫 번째 시도아무생각없이 짠 코드이다.시간을 하나씩 증가시켜가며, NxN의 모든 칸을 돌면서 제대로 동작하는 컴퓨터가 전체 컴퓨터의 절반을 넘었는지를 체크하는 방식으로 했고, 당연하게도 시간초과가 떴다.더보기N = int(input())comp = []total = 0for _ in range(N) : temp = list(map(int, input().split())) comp.append(temp) total += sum(temp)time = 0 # 시간temp = 0 # 동작하는 컴퓨터 개수while (temp * 2 = 1 : comp[i][j] -= 1 temp += 1print(time..