SWEA 6

[SWEA, 자바, 1983번] 조교의 성적 매기기

풀이요즘 기본 알고리즘 해결을 위한 언어를 자바로 고정하기 위해SWEA로 기초를 닦으며 이런 저런 공부를 하고 있음.아래 코드는 단순하게 테스트 케이스 만큼 특정 학생의 성적을 조회하는 문제인데뭔가 자바여서 그런지 코드가 더럽긴하다.아래 코드 내용은 별 다른게 없어 해결 방법에 대한 건 생략하지만내림차순 정렬은 Collections.reverseOrder() 메서드로 할 수 있으며,기본 타입 배열을 Collection에 해당하는 배열에기본 값으로 깊은 복사를 하고자 할 땐 Arrays.asList()를 사용하기.그리고 같은 기본 타입 배열에 깊은 복사를 하고자 할 땐 아래의 코드를 사용하기.System.Arrays.copyOf() 첫 번째 인자에는 배열두 번째 인자에는 배열의 길이를 넣기Clone()  ..

알고리즘 2024.08.29

[SWEA, 탐욕 알고리즘] 화물 도크

문제 해결 방법으로는 시작 시간과 종료 시간을 기준으로 화물차 작업 시간을 담은 배열을 내림차순 정렬 그리고 가장 중요했던 포인트로 오름차순 정렬을 한 뒤 종료 시간과 현재 시작 시간을 비교하며 나아가보니 중간에 시간을 많이 차지하는 경우가 있더라도 그냥 체크를 하고 넘어가서 문제가 되기에 내림차순 정렬을 해서 조사를 하는 것이 포인트가 되는 것 같다. for tc in range(1, int(input())+1): n = int(input()) form = [list(map(int,input().split())) for _ in range(n)] form.sort(key=lambda x:(x[0], x[1]), reverse=True) result = 0 for x in range(n): s,e = f..

알고리즘 2023.08.09

[SWEA, 탐욕 알고리즘] 컨테이너 운반

문제 해결 방법으로는 화물의 무게와 트럭 적재용량을 내림 차순 정렬 후 추가된 개수만큼 idx를 증가시키며 찾도록 했다. for tc in range(1,int(input())+1): n,m = map(int,input().split()) w_li = sorted(list(map(int,input().split())), reverse=True) # 화물 무게 t_li = sorted(list(map(int,input().split())), reverse=True) # 트럭 적재 용량 cnt, hap = 0, 0 # 적재된 횟수. 누적 합 for i in range(n): if t_li[cnt]>=w_li[i]: cnt, hap = cnt +1, hap+w_li[i] if cnt == m: break pr..

알고리즘 2023.08.09

[SWEA, 완전 검색] 전자카트

흠... 너무 오래걸렸다.. 오래 걸린 이유는 아래와 같은 tc의 경우에 [0,1]인 18부터 시작할 경우 우선 48,55 이렇게 두 가지 경로로 갈 수가 있는데 48로 가는 순간 다시 0번째 행으로 가게 되어서 34를 조회하게 되는 경우가 발생하게 되는 것 때문에 너무 오래 걸렸다... 0 18 34 48 0 55 18 7 0 그래서 1로 가지 않게 for문을 1, n으로 두고 마지막에 cnt 가 n-2의 경우에 s행의 0번째 인덱스 값을 더해줘 해결하도록 했음. def search(s, hap, cnt): global mx_hap if cnt == n-2: mx_hap = min(mx_hap, hap+arr[s][0]) return if hap >= mx_hap: return for i in rang..

알고리즘 2023.08.08

[SWEA, 완전 검색] 완전 검색

주의점으로는 elif 문을 추가해 hab이 현재 result 값 보다 큰 값일 경우엔 더 이상 조사하지 않도록 해주기! for tc in range(1, int(input())+1): n = int(input()) arr = [list(map(int,input().split())) for _ in range(n)] result = 11*n*n # dfs 사용 stack = [[0, 0, arr[0][0]]] while stack: x,y,hab = stack.pop() if x == n-1 and y == n-1: if result > hab: result = hab continue elif hab >= result: continue # 오른쪽, 아래만 탐색 for i,j in [[0, 1], [1, 0..

알고리즘 2023.08.08

[SWEA, 5110번] 수열 합치기

SWEA를 푸는게 오랜만이라 무심코 tc를 그냥 i로 지정해놓고 출력했는데 답은 맞는데 왜 풀리지 않을까라고 생각하고 보니 아래의 3번째 for문에 i를 사용하고 있었어서 시간을 조금 보냈다... (주의하기!!) for tc in range(int(input())): n,m = map(int,input().split()) li = [float('inf')] for _ in range(m): li2 = list(map(int,input().split())) for i in range(len(li)): if li[i] > li2[0]: li[i:i] = li2 break li.reverse() print('#%d'%(tc+1), end=' ') print(*li[1:11])

알고리즘 2023.08.07