전체 글 407

[백준 2559번] 수열

https://www.acmicpc.net/problem/2559import sys input = sys.stdin.readline n, k = map(int,input().split()) temp_list = list(map(int,input().split())) value = sum(temp_list[:k]) answer = value for i in range(k,n): value -= temp_list[i-k] value += temp_list[i] answer = max(answer,value) print(answer)이번 문제는 N일 동안 측정된 온도에서 연속 K일간 측정했을 때의 최댓값을 구하는 문제이다. 해당 문제는 단순히 완전탐색으로 풀게되면 O(N*K)의 시간복잡도가 나오게 되는데, N..

슬라이딩 윈도우(Sliding Window) 알고리즘 이란 ?

1) 슬라이딩 윈도우 알고리즘 개념고정된 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 활용해 문제를 풀이하는 알고리즘을 말합니다. 즉, 이미 한번 구했던 값을 재사용하는 것이 핵심입니다.  배열이나 리스트의 요소의 일정 범위의 값을 비교하거나 연산할 때 사용하면 매우 유용합니다.  문제풀이시 주로 사용되는 경우에는 배열과 그 부분배열을 어떤 조건하에서 계산하는 경우에 주로 사용됩니다. 예를 들어 구간 합 구하기, 부분 문자열 구하기등에 활용될 수 있습니다. 2) 슬라이딩 윈도우 동작원리슬라이딩 윈도우 알고리즘은 연속되는 투 포인터와 유사하게 부분 배열들을 활용하여 특정 조건을 일치시키는 알고리즘이지만, 부분 배열의 길이(크기)가 고정적 입니다.선형 공간(1차원 배열)을 2회 이상 반복적으로 탐..

[소프티어 6275번] 로봇이 지나간 경로(HSAT 1회 정기 코딩 인증평가 기출)

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysinput = sys.stdin.readlinedx, dy = [-1,1,0,0], [0,0,-1,1]# L : 왼쪽으로 90도 회전# R : 오른쪽으로 90도 회전# A : 로봇이 바라보는 방향으로 2칸 전진(범위를 벗어나면 수행X)# 같은 칸을 2번 이상 방문하지 못하도록 명령# 출발지점을 포함한 로봇이 방문한 모든 칸을 지도에 표시# 로봇이 지도에 사수에 표시한 모든 칸들만을 방문하도록 조작# 1. 처음 로봇을 어떤 칸에, 어떤 방향으로 두어야 하는가 ?# 2. 이후 로봇에 어떤 명령어를 순서대로 입력해야 하는가 ?# 입력하는 명령어의 개수를 최소화 했을때 [첫번째 로봇의 위치 좌표], [방향], [명령어]h, w..

Algorithm/DFS 2024.06.27

[소프티어 6281번] 동계 테스트 시점 예측

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysfrom collections import dequeinput = sys.stdin.readline# 아침에 출근해보면 테스트 차량들 위에 눈얼음이 생겨있음# 커다란 얼음이 녹고난 뒤에 테스트가 가능# 차량마다 당일의 테스트 가능 시점을 알기 위한 예측 프로그램 제작# N x M 크기의 격자 위에 눈 얼음의 모양을 작은 정사각형들이 집합되어 있는 모양으로 변환# 아침이 되면 기온이 상승하여 천천히 녹는다# 얼음은 상하좌우 중에서 적어도 2변 이상이 외부와 접촉했을 때 정확히 1시간만에 녹음# 얼음 내부에 있는 공간은 얼음 외부 공기와 접촉하지 않는 걸로 가정# 주어진 얼음이 모두 녹아서 사라지는데 걸리는 시간n, m =..

Algorithm/BFS 2024.06.27

[소프티어 6273번] 택배 마스터 광우

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai import sysfrom itertools import permutationsinput = sys.stdin.readline# 레일의 순서를 조작해서 최소한의 무게만 들 수 있게 일을 함# N개의 레일, 각 레일은 Ni 무게 전용 레일로 주어진다.(같은 무게의 레일 X)# 레일의 순서가 정해지면 택배 바구니 무게(M)를 넘어가기 전까지 택배 바구니에 택배를 담아 들고 옮겨야 함# 레일 순서대로 택배를 담되, 바구니 무게를 초과하지 않은 만큼 담아서 이동하게 되면 1번 일한 것으로 쳐줌# (단, 택배는 순서대로 담아야 하므로 레일의 순서를 건너 뛸 순 없다)# 총 k번 일을 하는데 최소한의 무게로 일을 할 수 있도록 하자n, m, k ..

[소프티어 7594번] 나무 조경

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysfrom itertools import combinationsinput = sys.stdin.readline# 최대 4번 인접해 있는 두 나무를 묶을 예정# 묶은 나무끼리는 서로 겹쳐서는 안됨# 두 나무가 묶였을 때 얻을 수 있는 아름다움은 '두 나무의 키의 합'과 동일# 묶인 쌍의 아름다움의 합을 최대로 만들려고 함n = int(input())heights = [list(map(int,input().split())) for _ in range(n)]dx, dy = [-1,1,0,0], [0,0,-1,1]answer = float("-inf")datas = []for i in range(n): for j in ra..

[소프티어 6279번] 스마트 물류

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysinput = sys.stdin.readline# P - 로봇, H - 부품n, k = map(int,input().split())area = list(input())visited = [False]*nfor i,value in enumerate(area): if value == 'P': for j in range(i-k,i+k+1): if 0  이번 문제는 로봇과 부품으로 이루어진 1차원 배열에서 로봇이 자신을 기준으로 k 거리만큼의 부품을 집을 수 있다고 했을 때, 부품을 집을 수 있는 로봇의 최대 수를 구하는 문제이다. 처음에는 DFS를 사용하여 풀이하려고 했는데, 생각보다 완전..

Algorithm/Greedy 2024.06.25

[소프티어 6255번] 플레이페어 암호

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai import sysfrom collections import dequeinput = sys.stdin.readline# 플레이페어 암호는 알파벳으로 이루어진 어떤 문자열을 암호화하는 방법# 알파벳으로 이루어진 문자열인 Key가 필요함# 한번에 두 글자 단위로 암호화를 진행# 5x5 크기의 표를 사용, 알파벳 26개를 모두 담기에는 칸이 1개 부족하여 I와 J를 동일하게 생각(편의상 J가 아예 X)area = [['']* 5 for _ in range(5)]alpa = [chr(x) for x in range(ord('A'),ord('Z')+1) if x != ord('J')]alpa_set = set()message = deque(li..

[소프티어 7727번] 함께하는 효도

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysinput = sys.stdin.readline# m명의 친구를 불러 나무에서 열매를 수확# n x n 크기의 격자에 모든 칸에 나무가 심어져있고, 각 나무마다 가능한 열매 수확량이 주어져 있음# 친구들은 서로 다른 위치에서 출발하여 1초에 1칸씩 상하좌우로 움직임# 최종적으로 모든 열매 수확량의 합을 최대로 만들고자 함# 한 나무에 여러 친구가 방문하게 되더라도 열매는 딱 한번만 수확 가능# 또한, 친구들끼리 이동하는 도중 만나는 것도 가능# m명의 친구들이 3초동안 최대로 얻을 수 있는 열매 수확량의 총합n, m = map(int,input().split())area = [list(map(int,input().spl..

Algorithm/DFS 2024.06.24

[소프티어 6247번] 자동차 테스트(HSAT 7회 정기 코딩 인증평가 기출)

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai import sysinput = sys.stdin.readline# 데이터의 중앙값을 사용하여 자동차의 평균적인 연비를 파악# n대의 자동차를 새로 만들었지만 3대의 자동차만 테스트할 수 있는 상황# n대의 자동차의 실제 연비 값이 주어졌을 때, q개의 질의에 대해 임의로 3대의 자동차를 골라 테스트하여# 중앙값이 mi값이 나오는 서로 다른 경우의 수# n개의 자동차 연비는 서로 다른 값 !n, q = map(int,input().split())values = sorted(list(map(int,input().split())))length = len(values)index = 1test_dict = dict()test_inputs = ..

Algorithm/Sorting 2024.06.23