본문 바로가기

코딩 테스트/프로그래머스20

[프로그래머스] (Swift) 시저 암호 - Lv.1 코딩테스트 연습 - 시저 암호 | 프로그래머스 스쿨 풀이 유니코드 스칼라 값과 정수 값을 오가는 것에 애를 많이 먹었다. 공식 문서를 찾아 보려 해도 키워드로 UnicodeScalar, unicodeScalar를 찾으면 문서가 너무 많이 나오고 설명이나 예시 코드가 많지 않아서 애를 많이 먹었다.🥲 결괏값을 빈 문자열로 초기화 공백인 경우 공백을 결괏값에 더하고 continue한다. 다음에는 간격을 더한 알파벳 값이 끝 값(z, Z)을 넘어 초과할 경우 이를 바꿔줘야 하는데, 이게 좀 까다롭다. 초과하지 않는 경우에는 단순히 간격을 더한 값을 결괏값에 더한다. 코드 func solution(_ s:String, _ n:Int) -> String { var result = "" // 문자열의 유니코드 스칼.. 2023. 5. 2.
[프로그래머스] (Swift) 다음 큰 숫자 - Lv.2 코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 📌 풀이 풀이 순서 우선 주어진 매개변수를 이진수의 문자열로 변환한다. 결괏값을 n으로 초기화한다. 십진수를 이진수로 변환하여 1의 개수를 세는 함수를 만든다 먼저 결괏값을 1 증가시켜 다음 수로 만든다. 기존의 n 값과 4번의 결괏값으로 3번의 함수를 써서 개수가 같을 때까지 무한 루프를 반복한다. 5번에서 탈출한 결괏값을 출력한다. 예외 조건 위의 풀이 순서로 하니 테스트 케이스 딱 하나가 시간 초과가 떴다. 아니 무슨... 왜... 혹시나 예제의 데이터처럼 이진수의 숫자가 모두 1인 수는 다음 숫자로 변환하는데 시간이 많이 걸릴까하는 생각이 들었다. 이진수로 변환했을 때 숫자가 모두 1인 예외 조건 맨 왼쪽의 1을 기준으로 바로 오른쪽에 0을 .. 2023. 5. 1.
[프로그래머스] (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.
[프로그래머스] (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) 정수 제곱근 판별 - Lv.1 📌 문제 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 스쿨 📌 풀이 Swift의 squareRoot() 메서드와 삼항 연산자를 이용해 풀어 보았다. squareRoot() | Apple Developer Documentation 다만, squareRoot()는 Double에 있는 공식 문서여서 형 변환에 유의해야 한다. 문제의 함수의 반환값 또한 Int가 아닌 Int64이니 그에 맞게 형 변환을 하자 📌 코드 func solution(_ n:Int64) -> Int64 { // n의 제곱근을 상수로 할당 let root = Int64(Double(n).squareRoot()) // 제곱근이 실제로 맞으면 원하는 조건의 반환값을, 아니면 -1을 반환 return root * root == n ? .. 2023. 4. 3.
프로그래머스) 분수의 덧셈 (Swift) 📌 문제 코딩테스트 연습 - 분수의 덧셈 | 프로그래머스 📌 접근 방식 두 분수를 더하여 기약분수로 만드는 알고리즘은 크게 세 단계로 나누어진다. 통분: 서로 다른 분모를 같게 만든다. 덧셈: 분모를 같게 하기 위하여 곱해진 분자를 서로 더한다. 약분: 분모, 분자를 더 이상 나눌 수 없을 때까지 나눈다. → 최대공약수 이용 여기서 통분과 덧셈은 단순한 사칙연산으로 해결이 가능하지만, 약분에서는 최대공약수를 구하여 한번에 나누는 게 핵심이다. 최대공약수을 구하는 방법은 유클리드 호제법을 이용했는데, 이에 대한 설명은 아래에 자세히 다루었으니 참고 하자. [재귀] 유클리드 호제법과 최대공약수, 최소공배수 유클리드 호제법을 배워 보고 재귀적으로(recursively) 구현한 것과 반복적으로(iterative.. 2023. 3. 27.
프로그래머스) sublime 자주 쓰는 단축키 (Mac) 프로그래머스의 sublime으로 코딩 테스트를 푸는데 중간에 편집하고 다듬는 과정은 여간 번거롭지 않다. 더군다나 sublime의 단축키는 기존에 쓰던 IDE의 단축키와 같은 것도 있고 다른 것도 있어 더 헷갈린다. Visual Studio Code에서 자주 쓰던 단축키 기능이 sublime에도 있나 해서 찾아 보며 정리해 봤다. 문제를 풀며 자주 쓰는 것들을 모아 봤는데, 유용한 것이 있으면 계속 업데이트 할 예정이다. 📌 한 줄 편집 단축키 설명 CTRL + CMD + ↑/↓ 줄 전체 위/아래로 한 줄 이동 CMD + SHIFT + D 줄 전체 복제 CMD + X 줄 전체 잘라내기 CMD + RETURN 커서부터 줄 처음까지 삭제 CMD + K 커서부터 줄 끝까지 삭제 📌 다중 커서 편집 단축키 설명.. 2023. 3. 27.
반응형