본문 바로가기

알고리즘 문제풀이222

[백준 16506] CPU (Swift) https://www.acmicpc.net/problem/16506 구현아래와 같이 어셈블리어를 아래 표의 규칙에 따라 기계어로 변환하는 문제완전 구현 문제다MOVC 1 0 5 --> 0010100010000101접근방법어셈블리어를 띄어쓰기 기준으로 구분해서 모두 조건별로 기계어 코드를 구해서 합쳐서 출력하면 끝~ 오답노트 중간에 print()를 잘못넣어둬서 출력형식이 다르다고 계속 뜨더라구요.조심하십쇼 소스코드import Foundationfunc solution() -> [String] { let map:[String:String] = [ "ADD":"00000", "ADDC":"00001", "SUB":"00010", "SUBC":"00.. 2025. 2. 27.
[백준 16197] 두 동전 (Swift) https://www.acmicpc.net/problem/16197 DFS BFS아래와 같은 보드에 #은 벽, . 은 빈칸, o는 동전이다. 동전은 2개만 존재함6 2.#.#.#o#o###네 방향키를 누를 수 있고, 누를 때 마다 두 동전이 그 방향으로 한칸씩 동시에 이동한다. 벽이 있는 칸으로는 이동할 수 없음 (단 이동 카운트는 체크) 이동하려는 칸에 다른 동전이 있어도 이동할 수 있음 이때, 두 동전 중 하나만 떨어지는 최소 횟수를 출력하는 문제, 단, 10번 보다 버튼을 더 많이 눌러야 하거나 두 동전을 떨어뜨릴 수 없는 경우 -1을 출력한다. 접근방법BFS를 곁들인..DFS식으로 구현하되 모든 경우를 고려하는게 관건이었던 문제였다.dfs 함수 인자로 두 동전의 현 위치와 현재까지 누른 버튼 횟수.. 2025. 2. 26.
[백준 1890] 점프 (Swift) https://www.acmicpc.net/problem/1890 DP42 3 3 11 2 1 31 2 3 13 1 1 0 현재 칸에서 우측 or 아래측으로 이동할 수 있는 칸 수가 각 칸에 명시되어 있는 위의 표를 보고1,1칸에서 N,N칸에 도달할 수 있는 경우를 출력하는 문제 접근방법DP 배열에 해당 칸까지 오는 경우의 수를 저장한다. 0,0 칸에서 시작하므로 이 칸은 1로 시작해서 맨 위칸 부터 왼쪽에서 오른쪽으로 순회하면서 각 칸에 올 수 있는 경우의 수를 더해가면 된다. 처음에는 BFS로 했었는데 그러면 이미 방문한 노드를 다시 방문할 수 있어서 시간복잡도가 더 올라가는 듯 오답노트마지막 칸에 갔을 때는 중복되니까 반복문 돌지 않고 종료해야한다. 소스코드import Foundationfunc s.. 2025. 2. 26.
[백준 1303] 전쟁 - 전투 (Swift) https://www.acmicpc.net/problem/1303 완전탐색 (BFS)5 5WBWWWWWWWWBBBBBBBBWWWWWWW 위 처럼 가로, 세로 칸 수와 병사들의 배열이 이차원배열 형태로 주어지면, 상하좌우로 인접한 각 팀의 병사들 그룹 별로 그들의 위력(N(인접한 병사들의 수)^2)을 계산한 총합을 차례로 출력하는 문제 접근방법BFS(Breadth First Search) 알고리즘으로 풀이했다. 2차원배열을 전체적으로 순회하면서 visit 배열과 queue를 가지고 W(아군)의 인접 그룹 인원수 체크, B(적군)의 인접 그룹 인원수 체크 -> 큐가 비면 그룹이 끝났다는 뜻이므로 cnt (병사수) 제곱해서 각 팀의 위력을 저장하는 변수 Strength에 더하기 오답노트"가로가 N이고, 세로가.. 2025. 2. 24.
[프로그래머스] 파일 정렬 (Swift) https://school.programmers.co.kr/learn/courses/30/lessons/17686 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문자열파일명이 담긴 배열이 주어지고, 이를 일정한 규칙에 따라 정렬하면 되는데, 규칙은 아래와 같다.["img12.png", "img10.png", "img2.png", "img1.png"]우선 이런 파일명들이 주어졌을 때, 파일명을 세 파트로 나눈다. HEAD : 파일명의 앞부분에서 숫자가 아닌 부분. 즉 img-12sd.png라면 img- 까지가 HEAD이다. 숫자가 나타난 이후에 나타나는 문자는 포함하지 않음 (영문 알파벳(대소문자)과 특수.. 2025. 2. 21.
[프로그래머스] 압축 (Swift) https://school.programmers.co.kr/learn/courses/30/lessons/17684?language=swift 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr구현 (투포인터..?)대문자 영어로 구성된 문자열이 주어지면, 그 문자열을 LZW(Lempel–Ziv–Welch) 압축 방법을 사용해서 압축하는 건데LZW 방법이 참..우선 A~Z까지 1~26 번호로 매핑된 맵이 있다고 한다. 문자열을 왼쪽에서부터 보면서 맵에 해당 문자열이 있으면 우선 맵에 없는 문자열 구간이 나올 때 까지 오른쪽으로 간 다음, 맵에 없는 문자열을 맵의 제일 끝에 추가한다 인덱스 번호는 맵에서 최대 인.. 2025. 2. 21.
[백준 3568] iSharp (Swift) https://www.acmicpc.net/problem/3568 문자열, 파싱한줄에 기본 타입과 변수들이 주어지는데, 이 변수들이름 오른쪽에 추가적인 자료형이 붙어있을 수 있다.이때 각 변수들을 한줄에 하나씩 출력하는데 "기본타입+추가적인 자료형의 역순 변수이름;" 이렇게 출력해야 하는 문제변수형에는 [], &, * 가 올 수 있고, 변수 이름은 알파벳 소문자 혹은 대문자로 구성 접근방법1. 우선 첫번째 기본 자료형을 defaultType이라는 변수에 저장해두고,2. 변수들을 하나씩 보면서 isLetter 메서드를 사용해서 이름만 분리했다.3. 이제 추가적인 자료형을 역순으로 배치하기 위해서, 각 변수에서 isLetter가 아닌 문자들만 필터링했고, 이 문자열을 역순으로 순회하면서 "&" 혹은 "*"인.. 2025. 2. 20.
[백준 2023] 신기한 소수 (Swift) https://www.acmicpc.net/problem/2023  소수N (1~8사이의 정수)가 주어지면 N자리 수 중 신기한 소수 조건을 만족하는 수를 모두 출력하는 문제신기한 소수 조건 : prefix 모든 접두어(?..수?)가 소수인 수예) 7331 : 7도 소수, 73도 소수, 733도 소수, 7331도 소수 접근방법1) 에라토스테네스의 체를 사용해서 N자리 수까지의 모든 수의 소수 여부를 저장한 배열을 만든 뒤, N자리 수를 하나씩 살펴보면서 그게 신기한 소수 조건을 만족하는지 확인한다 -> 시간초과2) 에라토스테네스의 체로 소수 여부를 저장한 배열을 만든 뒤, N자리 수를 하나씩 살펴보는데, 이때 접두어가 소수가 아니면 그 접두어로 시작하는 수는 건너뛰기 -> 시간초과3) 에라토스테네스의 체.. 2025. 2. 19.
[백준 15486] 퇴사 2 (Swift) https://www.acmicpc.net/problem/15486 DP 동적프로그래밍그림의 표처럼 날짜 별로 할 수 있는 상담의 걸리는 일수와 얻을 수 있는 금액이 주어진다.상담을 하고 있는 동안 다른 상담을 할 수는 없기 때문에 최대 이익을 얻기 위해 몇개만 골라서 상담해야한다.얻을 수 있는 최대 수익을 출력하는 문제 접근방법처음엔 dp 배열에 해당일에 상담을 하는 경우 얻을 수 있는 최대 이익, 상담을 하지 않는 경우 얻을 수 있는 최대 이익을 계산해서 저장해두는 식으로 했는데, 남은 일수를 함께 저장하다보니 결정적이지 못한 문제가 있었다 (테스트케이스는 무리없이 돌아갔지만 통과되진 않음) 질문 게시판 보니까 엄청 간단하게 푸셔서 당황..;포인트는 해당 일에 저장하는 게 아니라 해당일의 상담이 끝나.. 2025. 2. 18.