전체 글
-
백준 2477번 : 참외밭백준 with Python 2023. 1. 12. 18:05
1. 처음으로 짠 코드 나올 수 있는 경우의 수가 단 4가지 밖에 없기 때문에 각 경우에 따라서 큰 사각형에서 작은 사각형을 빼는 알고리즘으로 짰다. 하지만, 시작지점에 따라서 오류가 발생했다. ex) 서쪽으로 움직이고 한바퀴를 돌고나서 다시 서쪽으로 움직이는 경우 그래서 서쪽-남쪽-서쪽이 연달아 나오는 경우는 그대로 두고 서쪽-한바퀴돌고-서쪽의 경우는 서쪽으로 이동한 값을 서로 바꿔주는 알고리즘으로 다시 짰다. 2. 정답 코드 규칙성을 최대한 알아보려고 했는데, 같은 방향으로 두 번 간 경우에 서로 바꿔줘야 하는 조건을 알아 본 결과, 같은 방향이 하나 건너서 연달아 나왔는지 안나왔는지로 판단하는 것이 제일 쉬웠다.
-
백준 11478번 (집합과 슬라이싱)백준 with Python 2023. 1. 11. 21:24
'서로 다른' 부분 문자열을 출력해야 하므로 집합을 이용할 것이다. 집합은 리스트와 유사하지만 1)요소들의 중복이 허용되지 않고, 2)요소의 순서가 없다. S = input() ans = set() L = len(S) for i in range(L): for j in range(i, L): temp = S[i:j+1] ans.add(temp) print(len(ans)) ** S[i:j+1]은 S의 i부터 j까지의 인덱싱을 슬라이싱해서 만든 새로운 문자열이다.
-
백준 10815번 (이진탐색)백준 with Python 2023. 1. 10. 13:28
처음에는 그냥 리스트 메소드 중 count를 이용해서 해봤는데 아니나 다를까 바로 시간초과가 나왔다. N이 오십만 까지 입력되기 때문에 시간단축을 위해 sys입력과 이진탐색을 모두 사용했다. 이진탐색이란 오름차순 정렬된 배열에 사용하는 탐색방법이다. 그러니 먼저 L1.sort()를 해주고, 이진탐색함수를 정의해주자. 매개변수로는 배열(array)과 찾는 수(target)와 시작점(start) 끝점(end)을 받는다. 알고리즘은 매우 간단하다. 배열을 반으로 나누어 찾는 수가 작은 쪽에 있으면 end를 중간 수에서 바로 전 수(mid-1)로 지정해 작은 쪽에서 다시 진행하고 큰 쪽에 있으면 시작점을 중간 수 바로 다음 수(mid+1)로 지정해 큰 쪽에서 다시 진행한다. 이 과정을 정확히 중간 수(mid)에..