본문 바로가기

코딩 테스트43

[프로그래머스] (Swift) 다음 큰 숫자 - Lv.2 코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 📌 풀이 풀이 순서 우선 주어진 매개변수를 이진수의 문자열로 변환한다. 결괏값을 n으로 초기화한다. 십진수를 이진수로 변환하여 1의 개수를 세는 함수를 만든다 먼저 결괏값을 1 증가시켜 다음 수로 만든다. 기존의 n 값과 4번의 결괏값으로 3번의 함수를 써서 개수가 같을 때까지 무한 루프를 반복한다. 5번에서 탈출한 결괏값을 출력한다. 예외 조건 위의 풀이 순서로 하니 테스트 케이스 딱 하나가 시간 초과가 떴다. 아니 무슨... 왜... 혹시나 예제의 데이터처럼 이진수의 숫자가 모두 1인 수는 다음 숫자로 변환하는데 시간이 많이 걸릴까하는 생각이 들었다. 이진수로 변환했을 때 숫자가 모두 1인 예외 조건 맨 왼쪽의 1을 기준으로 바로 오른쪽에 0을 .. 2023. 5. 1.
[백준] (Swift) N과 M (2) 15650번: N과 M (2) 📌 풀이 중복되지 않아야 하는 수열이므로 조합을 구현하는 문제이다. 그렇다면 조합을 어떻게 구현할까? 바로 백트래킹 알고리즘으로 구현하면 된다. 백트래킹(Backtracking) - DFS로 구현 1. 배열 2개를 만든다. 백트래킹의 진행 과정에 대한 배열 `sequence` 노드의 방문 여부에 대한 배열 `visited` 2. DFS 함수를 정의하여, Base Case와 Recursive Steps에 대한 알고리즘을 세운다. Base Case: 깊이의 끝에 도달했을 때 여태 쌓인 진행 과정을 원하는 형식으로 변환하여 출력 Recursive Steps: `N`만큼 반복하되, 방문하지 않은 노드이면 방문 처리를 하고 다음 노드에 대한 재귀함수를 호출한다. (조건문에 도달하지 .. 2023. 4. 30.
[프로그래머스] (Swift) 이진 변환 반복하기 - Lv.2 📌 문제 코딩테스트 연습 - 이진 변환 반복하기 | 프로그래머스 스쿨 📌 풀이 (1) 문자열에서 특정 문자 제거 - filter 메서드 filter(_:) | Apple Developer Documentation filter와 클로저를 활용하여 "0"만 제거할 수 있도록 했다. var binaryString = "0101001011" // "110010101001" binaryString.filter { $0 != "0"} // "111111" (2) 이진법 변환 - radix 이니셜라이저 init(_:radix:) | Apple Developer Documentation 형 변환 메서드 String()에 radix 이니셜라이저를 넣어 해당 진법에 맞게 반환할 수 있도록 했다. String(4, radi.. 2023. 4. 28.
[프로그래머스] (Swift) JadenCase 문자열 만들기 - Lv.2 📌 문제 코딩테스트 연습 - JadenCase 문자열 만들기 | 프로그래머스 스쿨 📌 풀이 풀이의 핵심은 3가지이다. 문자열의 인덱스에 대한 반복문 대문자로 만들어야 할 조건에 대한 flag 문자열 인덱스 값에 대한 조건 3가지 조건 1: 공백일 때 → 공백을 결괏값에 추가 조건 2: flag가 1보다 클 때 → 대문자로 변환하여 결괏값에 추가 조건 3: flag가 1보다 작을 때 → 소문자로 변환하여 결괏값에 추가 📌 코드 Swift에서 문자열에 대한 인덱스 접근이 까다로워 애를 먹었다. 인덱스 하나 접근하는데 저리 복잡한 메서드가 필요하다니... func solution(_ s:String) -> String { // 필요한 변수 초기화 var flag = 1 var result = "" // 문자열.. 2023. 4. 25.
[LeetCode] LeetHub 연동 에러 문제 해결하기 (+ 난이도 별 디렉토리 생성) LeetCode가 새로운 UI 페이지로 개편됨에 따라 기존의 LeetHub 익스텐션으로는 작동하지 않는다. 열심히 구글링 해 본 결과 여러 방법이 있었지만 새롭게 개편된 홈페이지에서도 곧바로 GitHub 메시지가 올라가도록 수정을 했다. 📌 1. 기존 LeetHub 삭제 아래 줄을 복붙하여 크롬 익스텐션 설정으로 들어간다. chrome://extensions/ 기존의 LeetHub를 Remove 버튼을 눌러 삭제한다 📌 2. 수정한 LeetHub 파일을 git clone 하기 git clone 할 디렉토리 위치 생성 및 클론 클론할 디렉토리 위치를 생성하고 곧바로 그 디렉토리 위치에서 아래 링크의 github 링크에 들어가 클론한다. https://github.com/3ba2ii/LeetHub 아니면 아.. 2023. 4. 21.
[프로그래머스] (Swift) 문자열 내림차순으로 배치하기 - Lv.1 📌 문제 코딩테스트 연습 - 문자열 내림차순으로 배치하기 | 프로그래머스 스쿨 📌 풀이 (1) 아스키 값으로 변환하기 아스키 값으로 변환하고 내림차순으로 정렬한 다음 다시 문자열로 변환하는 방법이 있다. 문자열을 한 글자씩 아스키 값(8비트)으로 변환하는 메서드 asciiValue()를 사용한다. 내림차순으로 정렬한다. UnicodeScalar()로 아스키 값을 다시 문자열로 변환하여 한 글자씩 연결한다. (2) sorted() 메서드 이용하기 정말 허무하게도 sorted()와 클로저를 활용하면 한 줄로 표현이 가능하다. 문자열도 정렬이 바로 가능한 줄 몰랐다... 이게 돼? 단, 메서드를 사용하면 Array 형태인데, 이를 다시 형 변환하여 String으로 바꿔주기만 하면 된다. sorted()로 내림.. 2023. 4. 20.
[프로그래머스] (Swift) 제일 작은 수 제거하기 - Lv.1 📌 문제 코딩테스트 연습 - 제일 작은 수 제거하기 | 프로그래머스 스쿨 📌 풀이 (1) 반복문과 인덱스로 풀기 반복문을 통해 인덱스를 접근하여 최솟값을 갱신해 나가면 된다. 단, 최솟값을 찾기 위해 인접한 두 인덱스를 비교하기 해야 하기 떄문에, 인덱스의 범위 설정에 주의를 기울여야 한다. (1) Swift 메서드 활용 Swift의 메서드를 활용하여 손쉽게 구할 수도 있다. min()로 최솟값을 구하고 filter() 또는 removeAll()로 특정 조건을 만족시키도록 하면 된다. 📌 코드 1 - 반복문과 인덱스만으로 구하기 func solution(_ arr:[Int]) -> [Int] { // 배열의 길이가 1 이하일 경우 결괏값에 [-1] 할당 if arr.count 2023. 4. 18.
프로그래머스) signal: illegal instruction (core dumped) 원인과 해결 (Swift 오류) 목차 프로그래머스에서 정답률이 매우 높은 두 정수 사이의 합이라는 문제를 풀다가 갑자기 처음 보는 오류를 발견해서 당황했다. 머리말 오류 발생 메시지 signal: illegal instruction (core dumped) 띠용…? 난이도가 높지 않은 문제인데 왜 틀린 걸까… 여기저기 찾아 봤다. 원인 해당 오류가 발생하는 이유는 크게 두 가지이다. index out of range (활용한 index 범위 연산자가 초과함.) 옵셔널에서 nil 값에 의한 오류 해결책 이 중에서 내 코드의 문제점은 1번의 경우이다. 주어진 데이터에서 index의 범위를 초과했기 때문이다. 내가 사용한 닫힌 범위 연산자(Closed Range Operator)에 대해 좀 더 자세히 알아 보자. 닫힌 범위(Closed Ra.. 2023. 4. 14.
[백준] (Swift) 7785번: 회사에 있는 사람 📌 문제 7785번: 회사에 있는 사람 📌 풀이 Set 자료형과 관련 메서드를 알아야 한다. 역순으로 정렬할 때 sorted 메서드를 활용하면 간단히 풀 수 있다. 📌 정답 코드 import Foundation // 첫째 줄 n 입력 var n: Int = Int(readLine()!)! // 필요한 변수 초기화 var input: [String] = [] var result: [String] = [] var employees = Set() // n개의 줄에서 출입 기록을 차례로 집합에 할당 for _ in 1...n { let input = readLine()!.split(separator: " ").map { String($0) } let name = input[0] let status = input.. 2023. 4. 13.
[백준] (Swift) 14425번: 문자열 집합 📌 문제 14425번: 문자열 집합 📌 풀이 Set 자료형과 관련 메서드를 알면 간단하게 풀 수 있는 문제였다. 질문 처음에는 Set 자료형으로 요소를 추가하는 건 알았지만 아래의 궁금증이 생겼다. Q. 예시의 baekjoononlinejudge과 baekjoon처럼 해당 요소가 정확히 일치하지 않으면 count 하지 않을 수 있나? A. contains() 메서드가 알아서 count 하지 않는다(!) contains()의 예시 코드 var array = ["jellyfish", "cat", "dog", "bird"] var set = Set() for i in 0.. 2023. 4. 11.
반응형