본문 바로가기

Algorithm236

[Swift][프로그래머스][Queue] 다리를 지나는 트럭 요구능력 큐 문제풀이 큐를 따로 구현해줘야하니 이글을 먼저 읽고오시는걸 추천드립니다. 트럭이 정해진 순서대로 다리를 건넌다고한다. 다리를 건너는 트럭의 경우에는 뒤에서 들어와서 앞으로 나가니까 큐를 생각하게된다. 예제 1번으로 설명을하면 다리를 건너는 트럭의 큐(contiQueue)는 처음에 다리의 길이가 2이기 때문에 아래와 같이 생성된다. 0초 [0, 0] 1초 [0, 7] 2초 [7, 0] 3초 [0, 4] 4초 [4, 5] 5초 [5, 0] 6초 [0, 6] 여기까지돌고 마지막에 들어온 6은 맨 마지막에 따로 다리의 길이만큼 더해줘서 마지막 트럭이 다리를 건너는 시간을 처리해줬다. 후기 쉬운문제이지만, Swift의 경우에는 큐를 따로 구현해줘야 최적화되기 때문에 난이도가 있는편이다. 코드 stru.. 2022. 4. 12.
[Swift][Programmers][Queue] 프린터 요구능력 큐에대한 이해 문제풀이 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 위의 문제의 조건을 보면 맨앞에서 꺼내서 맨뒤로 넣는다. 전형적인 큐를 이야기 하고있다. 나의 경우 귀찮아서 문제를 지저분하게 풀었지만 튜플을 이용해서 큐를 사용하면 더욱 깔끔하게 문제를 해결 할 수 있다. ABCD를 넣어서 푸는사람도 있겠지만 이 역시 귀찮아서 identy배열에 0부터 queue의 개수만큼 넣어줘서 고유한 숫자로 적용해줬다. priorities가 [2, 1, 3, 2]라면 identy는 ["0", "1", "2", "3"]이렇게.. 2022. 4. 12.
[Swift][Programmers][고득점Kit] 기능개발 요구능력 큐 문제풀이 최악의 경우 시간복잡도가 O(n^2)이지만, 배열길이들이 100개이하라고 해서 아무리 최악의 경우라도 10000번이라 그냥 브루트포스로 풀었다. Swift의 경우 배열에 넣어놓고 removeFirst()를 사용하면 큐처럼 FIFO방식으로 구현이 가능하다. 이 문제는 시간복잡도를 크게 고려하지 않아도 풀 수 있도록 만들어놔서 상관없지만, 나중가면 removeFirst()의 O(n)의 시간복잡도가 아주 골치아파지니 자주 사용은 안하는걸 권해드린다. 나는 queue가 비어있지 않으면 계속 반복하면서 queue에 speed만큼을 더해주었고 그 queue를 맨처음부터 돌리면서 100이넘으면 계속 탐색(count에 1을 더하고 queue와 speed에서 FIFO방식으로 맨앞을 빼주었다.)하고 .. 2022. 4. 12.
[Swift][Bruteforce] 백준 6064번(카잉 달력) 요구능력 효율적인 브루트포스, 유클리드호제법 문제풀이 처음에는 무작정 돌리다가 시간초과가 났는데, 그 이유는 시간복잡도가 O(N * M)이 되서 최악의 경우에는 40000 * 40000번이 돌아갔기 때문이다.. 그럼 시간을 줄이는 방법은 뭐가 있을까? 이렇게 x와 y와 같이 두 개의 수를 사용해서 목표값을 맞추는 문제는 하나의 값을 고정하고 문제를 풀면 시간이 꽤 많이 단축된다. x값을 고정해서 문제를 풀어보자. curX, curY를 각각 목표값 x,y에 맞추기 위한 수 라고 생각해보자. 예제의 첫번째인 10, 12, 3, 9로 예를 들어보면, 그럼 curX는 3으로 고정이다. 우리는 curY값이 9가될 때 몇 번째 해인지 출력해주면 된다. 단순히 1씩 더해서 9가되는건 당연히 아니다. 처음에 curY값.. 2022. 4. 11.