백준 54

백준 11060 - 점프 점프 [Python]

시간 제한이 1초이기 때문에 점프를 하는 모든 경우를 확인하는 것은 힘들 것 같다. 마지막 칸으로 갈 수 있는 모든 칸을 확인하여, 그 칸들 중 가장 왼쪽에 있는 것을 고르는 것을 반복하여 이 횟수를 세면 된다. 빨간색으로 칠해진 마지막 칸으로 갈 수 있는 칸은 초록색으로 칠한 8번째, 9번째 칸이다. 이 중 가장 왼쪽에 있는 8번째 칸을 기준으로 다시 확인하면, 5~7번째 칸을 통하여 8번째 칸으로 갈 수 있다. 이러한 과정을 반복하면, 이렇게 첫번째 칸까지 오게 되는데, 첫번째까지 왔다는 것은 첫 칸부터 끝까지 가는 방법이 존재한다는 것을 의미한다. 만약 빨간색 칸으로 올 수 있는 초록색 칸들이 존재하지 않는다면, -1을 출력하면 된다. 반복문으로 짤 방법이 떠오르지 않아서 재귀적으로 짰다. [소스코..

백준 문제풀이 2020.12.23

백준 17302 - 흰색으로 만들기 [Python]

www.acmicpc.net/problem/17302 17302번: 흰색으로 만들기 첫 줄에 N과 M이 주어진다. (1 ≤ N, M ≤ 2,000) 다음 줄부터 N개의 줄에 걸쳐 각 행의 상태를 나타내는 길이 M의 문자열이 주어진다. 모든 문자열은 'B'와 'W'로 이루어져 있다. i 번째 줄, j 번째 문자 www.acmicpc.net 1~3번 행동의 차이를 보다가, 2번과 3번이 선택한 칸의 반전 여부가 다르다는 것을 알게 되었다. 모든 칸에 2번 행동을 취해준 후 결과에서 검은색이 있다면 그 칸은 3번 행동을 취해야 했던 칸임을 알 수 있다. 모두 3번 행동을 돌리고 흰색이 있으면 2번 행동을 취해야 했던 것이기도 하다. 어떻게 하던 상관은 없다. 1 2 3 4 5 6 7 8 9 10 11 12 1..

백준 문제풀이 2020.12.23

백준 19846 - 신기한 연산 [Python]

www.acmicpc.net/problem/19846 19846번: 신기한 연산 재현이는 문제를 풀다가 신기한 연산을 발견했다. 이 연산을 사용하면 홀수 번 등장하는 원소가 단 하나 있는 원소들의 나열에서 그 원소를 빠르게 찾을 수 있다. 예를 들어 수열 (1, 3, 2, 1, 2)에 www.acmicpc.net 입력을 잘 보면, 각 구간의 너비는 2N - 1 이상의 홀수이다. 따라서 aabbccddee.... 꼴로 만들면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 n,m,q=map(int,input().split()) ans = '' i = 96 while len(ans) != m: i += 1 if i == n + 97: i -= n ans += chr(i) if len(ans) =..

백준 문제풀이 2020.12.22

백준 20366 - 같이 눈사람 만들래? [Python]

www.acmicpc.net/problem/20366 [사용한 알고리즘] 두 포인터 [시간복잡도] O(N^3) 먼저 i번째, j번째 눈덩이 두개를 정해서 눈사람1의 높이를 정해준다. 이를 기준으로 두번째 눈사람을 두 포인터를 이용하여 구할 수 있다. 더 빠른 방법이 있을 것 같지만 잘 모르겠다. n = int(input()) li = sorted(list(map(int, input().split()))) ans = 10**10 for i in range(n): for j in range(i+1, n): s1 = li[i] + li[j] # 눈사람1의 높이 a = i b = n-1 while True: # li[i], li[j]는 이미 사용한 눈덩이이므로 넘겨줘야 한다. while a == i or a =..

백준 문제풀이 2020.12.22