본문 바로가기

전체 글

(88)
백준 19591 <독특한 계산기 > 좀 까다로운 시뮬레이션 문제이다. 이 문제의 접근법은 앞의 연산자와 뒤의 연산자 즉 투 포인터를 이용하는 문제이다. 나는 이문제를 위해 연산자와 수를 따로 담기 위해서 두개의 Arraylist를 만들어 줬다. 그렇게 해서 하나는 수를 담을 하나는 연산자를 기록해두었다. 맨 앞에 - 부호를 처리하기위해서 수식의 맨 앞이 -이면 수를 담는 배열에 0을 넣어주고 부호에 -를 넣어줘 시작을 하도록 진행했다. 문제 풀이 숫자와 부호를 구별해서 각각의 ArrayList에 넣는다 (불필요한 0을 제거하면서 넣어준다) 시작점과 끝점의 부호를 비교해서 시작점은 증가하도록 끝점은 감소하도록 해서 같을 때까지 진행한다. 시작점과 끝점이 같을 경우 현재있는 시작점의 수와 끝점의 수를 부호에 맞춰 계산한다. 문제 해결방법의 1..
백준 3691 <컴퓨터 조립> 골드 5라는 난이도를 믿지 못할 문제의 난이도였던 문제이다. 이 문제는 모든 부품의 종류를 선택하는데 선택햇던 부품 중 가장 낮은 성능을 올려주는 것을 최우선으로 한다. 교체를 할때에는 가격이 낮은 순으로 성능이 좋은 것을 교체해준다. 풀이 방법 각 부품을 hashmap에 제품의 이름을 key로 arraylist에 저장할 위치번호를 value로 저장한다. arraylist의 속성을 우선순위 큐로 해서 각각의 부품을 가격순으로 정렬한다. 모든 부품을 선택하기 위해 각각의 arraylist에 꺼내어 새로운 우선순위 큐에 저장한다. 이때는 성능이 낮은 부품을 꺼내야 하기 때문에 성능 순으로 정렬되게 한다. 성능이 낮은 부품을 꺼내 해당 부품에서 가격이 낮고 자신보다 성능이 높은 것이 나올 때까지 진행한다. 성..
백준 1976 <여행가자> 플로이드 와샬로 풀거나 각각의 시작점을 두고 모든 방향을 DFS 또는 BFS를 하면 해결되는 간단한 문제이다. 다만 n^3승이기 때문에 각 도시들마다 돌때 이 방법을 수행해주면 200^3*1000 이므로 시간 초과가 난다. 이 문제에서 주의할 점은 현재의 도시 다음 계획에 속한 도시가 자기 자신일 수도 있다는 것이다! 문제 풀이 각각의 마을을 시작점으로 두고 dfs를 통해 방문할수 있는 곳을 새로운 이차원 배열에 표시를 한다. m개의 마을을 돌면서 방문할 수 없다면 boolean 값을 false로 두고 결과를 출력한다. 이렇게 모든 지점에서 방문할수 있는 마을을 체크하게 되면 n^3 만큼의 시간이 걸린다. 이렇게 해서 resultmap에 표시를 한다. m개의 마을을 순서대로 갈수 있는지 체크하는 것이다...