분류 전체보기

· Koala - 4기
후위 표기식 문제 정리 문제를 두 가지 방법으로 풀어보았습니다. 첫 번째는 switch case 문을 사용하여 모든 연산자에 대한 처리를 해주었고, 두 번째는 map을 사용하여 +, -, *, /에 우선순위를 미리 부여하여 문제를 풀었습니다. 첫 번째 방법 A-Z의 문자는 바로 출력 '(' 문자가 들어올 시 우선순위를 0으로 지정하여 stack에 push ')' 문자가 들어올 시 '('를 만나기 전까지 stack에 들어있는 연산자 pop +, -, *, /가 들어올 시 stack의 top에 있는 문자와 새로 들어온 문자의 우선순위를 비교하여 새로 들어온 문자의 우선순위가 top 문자의 우선순위와 같거나 작을 경우 stack의 top 문자 출력 stack에 남아있는 연산자가 있다면 마지막에 모두 출력 두 ..
· Koala - 4기
정보 상인 호석 문제 정리 이번 문제는 우선순위 큐와 map을 사용하여 문제를 풀었습니다. key로 Name을 value로 우선순위 큐를 담아서 map을 구성해주었습니다. 가치 순으로 가장 비싼 정보 : 우선순위 큐를 떠올림 Name에 따라 정보 가치가 저장된다는 점에서 map을 떠올림 처음 제출했을 때에는 "큐에 남아 있는 정보 가치의 개수 < 호석이가 거래하려고 하는 정보 개수"를 고려해주지 못해 SegFault가 나왔었는데 그 부분 처리를 해주었더니 정답으로 인정이 되었습니다. 정보 상인 호석 소스 코드 #include #include #include #include using namespace std; int main(void) { map mp; int t; long long int sum = 0..
· Koala - 4기
크게 봤을 때 정보를 저장하고, 원하는 만큼 삭제하는 문제였다. 이름, 정보의 개수, 정보의 가치가 가장 주된 내용이었다. 쿼리의 처음 입력 값이 1 일 때와 2일 때를 나눠 구분해 1이면 정보 저장 이름에 해당하는 정보들을 우선순위 큐에 집어 넣으면 된다고 생각했다. map query; 으로 선언해 해당 정보상인의 정보들을 저장한다. 2이면 정보 삭제를 하면 된다. 원하는 정보의 개수인 b 만큼 우선순위 큐에서 pop하면 된다. 우선순위가 정해져 있기 때문에 top()을 b번 pop한다 pop한 값들을 모두 더하면 답이 된다. 처음에는 아무 생각 없이 답을 int로 선언했다가 틀렸었다. 이를 long long으로 선언하니 풀렸다. #include #include #include #include #inc..
· Koala - 4기
플로이드 알고리즘을 처음 써봐서 좀 해맸던 것 같다 adj는 소요 시간, route에는 이전 방문 집하장 INF를 987654321로 초기화 시켜놓았다. 1번부터 순서대로 경로에 추가 후 해당 집하장을 들리는 것과 현재 소요시간과 비교해서 더 작을 때 업데이트 #include #include #include #include #include #include using namespace std; #define INF 987654321; int adj[201][201]; int route[201][201]; int main(){ int n, m; cin>> n >> m; while(m--){ int v1, v2, w; cin >> v1 >> v2 >> w; adj[v1][v2] = w; adj[v2][v1] ..
· Koala - 4기
자바스크립트를 주로 사용해와서 보자마자 아래와 같은 데이터 구조를 만들면 되겠구나! 생각했지만, 파이썬에서는 나름 생각할게 많았던 문제였습니다. const infos = { Cpp: [1, 2, 3, 4, 5], python: [1, 2, 3, 4] ... } 우선 구현해야 할 것은 명확했는데, 파이썬의 딕셔너리(C++의 맵과 유사합니다!)를 활용해 (키 : 값) 쌍을 (정보 이름 : 정보 값이 담긴 우선순위 큐) 형태로 만들어주면 될 것 같았습니다. 그래서 처음에는 infoMap = dict([name, infoHeap]) 처럼 코드를 작성해 문제를 풀려 했는데, 파이썬의 딕셔너리는 C++과 다르게 "문자열 : 리스트" 타입의 맵으로 초기화할수 없다는 것을 알게 되었습니다. 다만 초기화가 아닌, 빈 맵..
· Koala - 4기
각 상인의 이름을 키로 갖고 우선순위 큐를 밸류로 갖는 맵, 딕셔너리를 만들면 되는 문제였습니다. 입력받은 첫 번째 값이 1인지 2인지 한번 나눠주고 그 다음 알맞게 우선순위 큐에 푸시해주고, 큐에 존재하는 원소의 개수보다 지워야 할 값의 개수가 많을 때만 생각해주면 간단했습니다. python from heapq import heappush,heappop from sys import stdin input=stdin.readline q=int(input()) total=0 shopkeeper={} for i in range(q): order=input().rstrip().split() if order[0]=='1': try: for i in range(3,len(order)): heappush(shopke..
· Koala - 4기
힌트 1 더보기 시간 복잡도를 잘 생각하셔야 합니다! 만약 이미 90만 개의 원소가 배열에 있을 때, 나머지 쿼리 1만개에서 원소를 하나씩 넣고, 넣을 때마다 정렬한다고 합시다. 그렇게 되면 시간 복잡도는 대략 (10,000) * (100만 log 100만) 이 되어버립니다. 힌트 2 더보기 우선순위 큐(최대힙)의 원소 삽입에 걸리는 시간 복잡도는 logn입니다. 힌트 3 더보기 우리는 이 문제를 맵을 이용해 간단화 시킬 수 있습니다. 어떤 고릴라의 정보 배열을 나타낼 때 c++에서는 map 로 만든다면, 각 고릴라가 key값이 되고 해당 고릴라가 가진 정보들이 value가 됩니다. 문제 풀이 더보기 얼핏 보면 정렬 문제 같지만, 절대 정렬로 풀면 안되는 문제입니다. 이유는 힌트 1에 있습니다! 문제에서..
· Koala - 4기
이번 문제는 풀기에 난이도가 좀 높았던 것 같습니다. 아직 구현을 잘 못해서 그런지 시뮬레이션이나 브루트포스 같이 구현 비중이 높은(?) 문제가 나오면 항상 어렵다고 느끼게 되네요. 다른 분들이 푼 것을 참고해서 이해하고 풀어보았습니다. 정리 문제를 풀면서 제일 까다로웠던 부분은 블록 그룹을 찾아주는 부분이었습니다. 처음 접근 방식은 bfs로 행, 열 좌표, 블록 그룹과 무지개 블록 개수, 블록 그룹 개수를 찾아주었습니다. 행 열 좌표를 찾으려고 했던 이유는 조건 1번 때문이었는데요. 나중에 생각해보니 왼쪽 위부터 순차적으로 내려오기 때문에 무지개 블록 수와 블록 그룹의 개수가 같다면 마지막 블록 그룹이 저장될 수밖에 없었습니다. 일반 블록은 한 번 방문하면 또다시 방문할 수 없지만, 무지개 블록의 경우..
· Koala - 4기
삼성기출문제집에서 본 기억이 있었습니다. 그리고 그 중 제가 풀어본 것들과 비슷하게 하루종일 구현하고 나면 한번에 끝나는 법이 없고 수정하는데도 한참 걸렸습니다... 중력, 회전, 조건에 맞는 bfs와 리턴되는 값 이것들만 잘 설계하면 풀릴 문제라고 생각했습니다. 일단 중력부터 구현해주었습니다. 밑에서부터 올라오다 조건에 맞는 값을 찾으면 다른 블럭이 있거나 -1 또는 맨밑일때 까지 그 값의 위치를 내려주었습니다. def gravity(): for i in range(n-1,-1,-1): for j in range(n): if board[i][j]>=0: start=i while True: if 0
· Koala - 4기
아직 노드나 에지같은 개념을 잘 몰라서 플루이드 워셜같은 개념을 이해하기 힘들었습니다. 이해가 완벽하지 않아서 엄청 해매게 되었습니다... 자료구조 개념을 공부할 필요를 느꼈습니다. 문제를 총 2가지 방법으로 풀었습니다. 첫 번째 방법은 다익스트라를 모든 적하장마다 해 주는 방법입니다. from sys import stdin from heapq import heappush,heappop from math import inf input=stdin.readline n,m=map(int,input().split()) time_table={i:[]for i in range(n)} route_table=[[0 for i in range(n)]for j in range(n)] for i in range(m): x,..
· Koala - 4기
정리 이번 문제는 플로이드-와샬을 사용해서 풀었습니다. 전에 3문제 정도 플로이드-와샬과 관련된 문제를 전에 풀어봤었는데 그래서인지 다익스트라보다는 조금 더 친숙한 감이 있기도 했고, 경로표의 형태를 보니까 플로이드-와샬로 풀어도 무방할 것 같았습니다. 다른 건 괜찮았는데 마지막에 조금 헤맸던 부분이 1->2->5->6과 같이 2개 이상의 노드를 거쳐서 갔을 때 최단거리가 나오는 부분이었는데요. 처음에 짰던 코드로 돌렸을 때에는 2가 아닌 계속 5(도착 노드 바로 전 노드)가 나왔습니다. 어떤 식으로 접근을 해야 할지 감이 잡히지 않아서 이 부분 풀이를 참고했는데, road 배열(최단 경로를 가기 위해 처음 방문하는 노드를 담은 배열)의 경우 [i][k]를 구해주면 최단거리로 가기 위해서 제일 처음 방문..
· Koala - 4기
문제 링크 : https://www.acmicpc.net/problem/1719 1719번: 택배 첫째 줄에 두 수 n과 m이 빈 칸을 사이에 두고 순서대로 주어진다. n은 집하장의 개수로 200이하의 자연수, m은 집하장간 경로의 개수로 10000이하의 자연수이다. 이어서 한 줄에 하나씩 집하장간 경 www.acmicpc.net 1753번처럼 한 노드에서 다른 노드들까지의 최단거리를 찾되, 모든 노드에 대해 이를 반복해 풀 수 있는 문제입니다. 다만 두 가지 함정이 숨어 있었는데요, 한번 천천히 알아보도록 하겠습니다. 이번 답안은 다익스트라 입문 문제인 1753번 코드를 많이 참고하면서 완성했는데요, 첫 번째 함정은 이번 문제는 그래프가 양방향 그래프가 된다는 것입니다. 1753번에서는 단순히 한 노드..
KauKoala
'분류 전체보기' 카테고리의 글 목록 (132 Page)