본문 바로가기

알고리즘/SWEA19

SWEA D3 6485. 삼성시의 버스 노선 (python) 삼성시의 버스 노선 풀이 문제 입력이 아주 조금 복잡하긴 한데 자세히 읽으면 금방 무슨 말을 하고자 하는지 이해가 된다. A1, B1 이렇게 적혀있는 것들은 한 버스 노선이 어디 정류장부터 어디 정류장까지 가는지에 대한 정보를 주는 것이다. 그리고 C들은 정류장 번호이다. 나는 머릿속의 복잡함을 최소화하고자, 일단 각 리스트를 만들고 이를 리스트에 넣은 뒤에 정리하는 방식으로 했지만, 그렇게 하지 않더라도 풀 수 있는 방법이 충분히 있을 거라고 생각된다. 우선 나는 시작 정류장, 도착 정류장, 확인 정류장을 각 리스트를 생성하고, 이후 이를 이용하는 방식을 사용했다. 또한 5000개의 정류장이므로, 1~5000번을 이용하기 위해, bus_stop = [0] * 5001로서 변수를 생성하였다. 위처럼 변수.. 2024. 2. 27.
SWEA D3 13428. 숫자 조작 (python) 숫자 조작 풀이 숫자 2개를 서로 위치만 바꿔서 가장 큰 값과 가장 작은 값을 확인하는 문제다. 안 바꿨을 때 가장 큰 값이거나 가장 작은 값이면 안 바꿔도 된다. 또한 맨 앞자리는 0일 수가 없음도 인식하고 풀면 금방 풀린다. 내가 푼 방식은 완전탐색으로 시도했다. N = 10^9이지만, 실제로 사용하게 되는 자릿수는 9개이기 때문이다. 그래서 아래처럼 풀었다. 일단 string자체로는 변환을 할 수 없으니, list로 변환해서 숫자 자리를 바꾸는 방법을 이용했다. 그 결과 아래 코드가 생성되었고 문제를 해결했다. def solution(S): global min_value global max_value for i in range(len(S)-1): for j in range(i+1, len(S)): .. 2024. 2. 27.
SWEA D3 14692. 통나무 자르기 (python) 통나무 자르기 풀이 어떻게 풀지 전체를 다 뒤지는 방식으로 해야 하나? 하다가 N이 10^9까지 있어서 전체를 다 뒤지는 방식이면, 2중 for문으로는 해결되지 않을 것이라 생각되었기에 테스트 케이스를 관찰했다. 감이 와서 시도해 보니 PASS 되었다. 먼저 시도하는 사람이 Alice이므로 N이 짝수이면, Alice가 이기고, 홀수라면 Bob이 이기는 게임이 된다. 먼저 마지막 2를 손대는 사람이 이기는데, 그게 짝수일 때는 처음 손댄사람, 홀수일 때는 뒤에 손 댄 사람 이기 때문이다. 따라서 아래처럼 풀었다. T = int(input()) people = ["Alice", "Bob"] for testcase in range(1, T+1): N = int(input()) if N %2 == 0: prin.. 2024. 2. 27.
SWEA D3 16002. 합성수 방정식 (python) 합성수 방정식 풀이 문제를 보면 알겠지만 x-y = N을 만족시키는 10^9 이하의 두 합성수 x와 y를 아무거나 하나 구하는 프로그램을 작성하라 위와 같은 내용이 적혀있다. 따라서 N만큼의 차이가 나는 두 합성수만 답으로 내놓으면 된다는 것이다. 그래서 난 (1,2),(2,3),(3,4).... 를 비교하면서 합성수가 되는지, 그리고 8,9가 될 때 둘 다 합성수였으므로, 뭘 곱해도 합성수가 될 테니, 이를 N에 곱한 것을 출력했다. 출력값에서는 먼저 출력되는 x가 y보다 큰 값이기 때문에 x = N 9 y = N 8 로 만들고 출력해주면 되었다. T = int(input()) for testcase in range(1, T+1): # 합성수 일단, 소수가 아닌 것. 음수나 0이 아닌것. N = int.. 2024. 2. 26.
SWEA D3 18662. 등차수열 만들기 (python) 등차수열 만들기 풀이 등차수열 문제이다. 문제에 안적힌 내용들이 있는데, 아래 먼저 푼 사람들의 내용을 보고 알았다. 주어지는 a,b,c의 순서는 바꿀 필요없다. 0의 출력은 0이 아니라 0.0으로 되어야한다. 테스트케이스중 0,2,1 의 경우 답이 1.5인데 이유는 2에서 1.5를 빼면 0,0.5,1 로 0.5를 값으로 하는 등차수열이 되기 때문이다. 또한 이 케이스에서 볼 수 있듯이 순서를 바꿔도 된다면 답은 0이 되어야하는데 그렇지가 않음을 확인할 수 있다. 난 아래처럼 풀었다. a,b,c 가 있을 때, c-b = b-a 가 되어야하고, 또한 이때 이게 성립하지 않으면 a,b,c중에 가장 작은 더하거나 뺄 x값을 정해줘야하는 문제이다. 그래서 solution이라는 함수를 생성하고 테스트 케이스를 이.. 2024. 2. 26.
SWEA D3 16910. 원 안의 점 (python) 원 안의 점 풀이 반지름이 N인 어떤 원안에 있는 점의 개수(격자 1칸이라고 생각하고 찍히는)를 구하는 것이다. 아주 간단한 방법인 이중 for문으로 해결했다. 다행히 시간초과도 나지 않았다. x아 y가 실제로는 -N~N의 범위를 가지면 되므로 이를 아래처럼 이중for문을 작성하고 if문을 통과하면 answer += 1을 하는 방법으로 했다. for i in range(-N, N+1): for j in range(-N, N+1): if (i**2 + j**2) 2024. 2. 25.