
어느 날, 전설 속에 전해 내려오는 비밀 주문서가 세상에 다시 모습을 드러냈습니다. 이 주문서에는 마법 세계에서 사용되는 모든 주문이 적혀 있는데, 각 주문은 알파벳 소문자 11글자 이하로 구성되어 있습니다. 주문서에는 실제로 마법적 효과를 지니지 않는 의미 없는 주문

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.예를 들어 array가 1, 5, 2, 6, 3, 7, 4, i = 2, j = 5, k = 3이라면array의 2번째부터 5번째까지 자르면 5, 2, 6, 3입니

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.기존에 제출한 코드는 불필요한 코드가 많고, 성능 저하

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.b

수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일

오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다.정답은 아무에게도 말하지 마세요.콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?단, 보유 중인 빈 병이 2개 미만이면, 콜라를

"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니

코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.한 번 사용한 카드는 다시 사용할

과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.한 상자에 사과를 m개씩 담아 포장합니다.상자에 담긴 사과 중 가장

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...2번 수포자가 찍는

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수

어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리 · 학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트

숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다.각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수

휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다.예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가

두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아

햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상

나만의 카카오 성격 유형 검사지를 만들려고 합니다.성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예

코딩테스트를 준비하는 머쓱이는 프로그래머스에서 문제를 풀고 나중에 다시 코드를 보면서 공부하려고 작성한 코드를 컴퓨터 바탕화면에 아무 위치에나 저장해 둡니다. 저장한 코드가 많아지면서 머쓱이는 본인의 컴퓨터 바탕화면이 너무 지저분하다고 생각했습니다. 프로그래머스에서 작

문제 링크1\. 약관 타입이 privacy 문자열에 포함되는지만으로 확인"A"라는 타입을 찾을 때 "AA", "AB" 같은 잘못된 매칭이 발생할 수 있음.정확히 공백으로 구분된 마지막 요소와 매칭해야 함2\. 날짜 계산 방식이 비정상월 수 12를 초과할 때 처리 방식이

문제 링크: 프로그래머스 / 달리기 경주firstIndex(of:)의 반복 호출 → O(n) 시간 복잡도이는 callings.count만큼 반복 → 전체 시간 복잡도 = O(n\*m)이 때문에 시간 초과 발생Dictionary<String, Int>를 병행 사용하

}

프로그래머스 / 신고 결과 받기중복된 신고 처리 방식이 비효율적신고가 "A B" 형식으로 들어오기 때문에 Set<String>으로 처리하고 있지만, 추후 가공을 위해 분해해야 하므로, Set<(신고자, 피신고자)> 형식이 더욱 직관적badUsers를 배열로

프로그래머스 / 최댓값과 최솟값Int($0) ?? 0 => 잘못된 값 포함 가능성min()!,max()! => 강제 언래핑 위험성한 줄에 너무 많은 처리를 넣어 가독성 떨어짐compactMap을 사용하여 유효한 값만 추출guard let을 사용하여 안정성 확보중간 변수

프로그래머스 / JadenCase중복된 공백처리가 없음 => omittingEmptySubsequences 사용비효율적인 문자 변환 => enumerated().map을 매번 사용하여 각 글자를 다시 처리함문자열 자체가 빈 문자열일 때 처리가 없음 => 입력이 ""일

프로그래머스 / 이진 변환 반복하기문자열 result의 변환 과정 중 불필요한 연산result.filter { $0 == "1" }.count는 result에서 1의 개수를 세는데, 결국 1이 몇 개인지만 알면 되는 문제그 다음에 1의 개수를 10진수로 보고 이걸 다시

프로그래머스 / 피보나치 수배열 사용

프로그래머스 / 카펫잘못된 while 조건이 조건은 brown보다 total이 클 때 루프를 반복. 그러나 목표는 (width - 2) \* (height - 2) == yellow이면서 (width \* height - yellow == brown)이 되도록 모든 조

프로그래머스 / 예상 대진표

프로그래머스 / N개의 최소공배수비효율적인 완전탐색 방식currentLCM에서 시작하여 모든 수로 나누어 떨어지는 수가 나올 때까지 계속 += top을 반복하는 방식이는 숫자가 클수록 계산량이 기하급수적으로 증가하게 됨\[100, 200, 300, 400, 500, 6

프로그래머스 / 멀리 뛰기

프로그래머스 / 귤 고르기

프로그래머스 / 괄호 회전하기let rotated = Array(sArray\[i..<n] + sArray\[0..<i])를 통해 문자열 회전isValid(\_:)를 통해 올바른 값인지 검수Stack 구조를 사용하여 Stack의 마지막 값과 현재 값이 한 쌍

프로그래머스 / 연속 부분 수열 합의 개수슬라이싱round\[j...(j + i)]Array 슬라이싱은 내부적으로 ArraySlice를 만들어서 O(k) 시간이 걸림이게 중첩 반복문 안에 있어서 총 시간 복잡도가 O(n^3)이 됨중첩 반복문바깥 i는 부분 수열의 길이

프로그래머스 / H-Index어떤 수 h에 대해,인용 횟수가 h 이상인 논문이 h편 이상이고,나머지 논문이 h 이하의 인용 수를 가졌을 때,가능한 최대의 h값이 H-Indexsorted된 배열에서 index + 1 > citation이 처음으로 성립되는 순간이 바로 H

프로그래머스 / n^2 배열 자르기n의 범위는 최대 10^7, 즉 1억 원소(10^7 \* 10^7)는 만들 수도 없고, 저장할 수도 없음현재 코드는 n\*n 배열을 전부 만들어서 붙이려고 시도answer = answer + arr처럼 매 루프마다 +로 배열을 누적하면

프로그래머스 / 할인 행사매 슬라이딩 윈도우마다 새 딕셔너리를 만들고 그 안에서 want 전체를 순회이중 루프에 가까운 구조 -> O(n\*m), n: discont, m: want비교 방식도 불안정: wanti가 딱 필요한 만큼 있어도, Index가 다르면 통과 못

프로그래머스 / 의상각 카테고리별로 최대 1개씩 아이템을 사용아이템을 사용하지 않는 경우도 고려모든 아이템을 사용하지 않는다는 것은 없기 때문에, 최소 1개의 아이템을 사용한다고 가정수식:경우의 수 x = (AItems.count + 1) \* (BItems.count

프로그래머스 / 기능개발가독성 향상반복 구조 개선for-in 대신 zip을 사용하여 간결하게 표현유지보수성 개선

시간복잡도란 특정 함수나 알고리즘이 얼마나 효율적인지, 특히 입력 크기가 커질 때 성능이 어떻게 변하는지 예측하는데 중요한 요소이다. 실제로 시간을 측정하는 것이 아니라, 입력 크기(N)에 비례하여 연산의 개수가 얼마나 증가하는지를 대략적으로 파악하는 것을 말한다.빅-

프로그래머스 / 프로세스priorities 배열을 그대로 순회하면서 우선순위가 제일 높은지를 비교하고 실행하지만,"우선순위가 낮으면 큐의 뒤로 보내야 하는 로직"이 정상 작동하지 않음.즉, priorities를 회전시키지 않고 currentIndex만 증가시키고 있기

프로그래머스 / 피로도이미 예전에 한 번 풀어봤던 문제라서 비교적 쉽게 풀었다.DFS를 활용하는 문제로, 기초적이며 가장 최적의 풀이이다.DFS(재귀): dfs 함수는 재귀적으로 호출되며, 모든 가능한 던전 탐험 순서를 시도한다.visited 배열: 이미 방문한 던전을

프로그래머스 / k진수에서 소수 개수 구하기소수 판별 알고리즘의 비효율성현재 방법은 매 num마다 2부터 num까지 나눠보며 소수 여부를 판단한다.이 때 시간 복잡도는 O(N)숫자가 커질수록 매우 비효율적이다.불필요한 소수 판별if num == 0 || num == 1

프로그래머스 / 주차 요금 계산시간 계산 코드 중복이 로직은 values.count % 2 == 0과 else 둘 다에 들어가 있는데, 중복된 코드이기 때문에 개선이 가능하다.조건 분기 없이 한 번만 순회하면서 IN과 OUT 페어를 처리하고, 짝이 안 맞는 경우 마지막

프로그래머스 / 모음사전모든 단어 생성: "A", "E", "I", "O", "U" 모음을 사용하여 길이가 1부터 5까지의 모든 단어를 생성한다.사전 순 정렬: 생성된 단어들을 사전 순으로 정렬한다.순서 찾기: 정렬된 리스트에서 주어진 word를 찾아 인덱스를 반환한다

프로그래머스 / 뒤에 있는 큰 수 찾기이중 for-loop 사용 -> 시간 복잡도 O(N²)모든 i에 대해 j를 순차적으로 끝까지 탐색 -> 비효율적스택 자료구조를 활용배열을 역순으로 순회하며 현재 숫자보다 작거나 같은 숫자는 스택에서 제거그 후 스택의 top에 있는

프로그래머스 / 롤케이크 자르기시간복잡도 문제현재 시간 복잡도는 removeFirst() = O(n) \* Set(arr) = O(n) = O(N²)으로 매우 비효율적Dictionary를 활용미리 왼쪽부터의 토핑 종류 개수와 오른쪽부터의 토핑 종류 개수를 계산하면서 비

프로그래머스 / 숫자 변환하기중복 호출:currentSum을 통해 답을 도출하기 때문에 모든 경로를 탐색하게 됨이는 불필요한 연산(이미 최저값을 찾은 후에도 계속 찾음)이 기하급수적으로 증가하여 비효율적깊은 재귀 호출(스택 오버플로우 위험성):예: x = 1, y =

프로그래머스 / 2개 이하로 다른 비트불필요한 while 루프count > 2일 때 루프를 돌고 있지만, 조건이 만족해도 루프는 계속 돌아가는 상황if distance <= 2이면 answer.append(result)만 하고 루프 종료를 하지 않음 -> coun

프로그래머스 / 다리를 지나는 트럭큐(Queue)를 이용한 방식으로 문제 해결매 초마다 트럭을 다리에서 한 칸씩 앞으로 움직임 -> Queue.removeFirst()현재 다리 위 총 무게 + 다음 트럭 무게 <= weight라면 Queue에 다음 트럭 추가wei

프로그래머스 / 가장 큰 수ex) 3과 30이 있으면:"330" vs "303" → "330"이 더 크니까 "3"이 "30"보다 앞에 와야 함따라서 두 문자열 a, b를 비교할 때 a + b가 b + a보다 크면 a가 먼저

프로그래머스 / 쿼드 압축 후 개수 세기현재 영역 S가 모두 같은 값인지 확인만약 모두 같다면 그 값이 0인지 1인지 확인다르다면 4등분하여 재귀 호출마지막에 전체 0 개수, 1 개수를 합쳐서 리턴

프로그래머스 / 택배상자answer.contains(current)의 사용 → O(n)매번 answer.contains(current)로 현재 상자가 이미 배송되었는지 확인 중이 연산은 O(n)이어서 최악의 경우 O(n²)로 시간 초과 위험이 있음answer 배열에 불

프로그래머스 / 베스트앨범played.sorted(by:)의 불필요한 정렬played 딕셔너리는 장르 수만큼만 존재함.만약 genres의 크기가 크지 않다면 문제 없지만, 장르 수가 많을 경우 매번 정렬하는 것이 비효율적 => O(g log g)music\[genre]

여행경로 알고리즘 풀이오늘은 항공권 문제를 풀어본 경험을 공유해보려고 한다. 문제는 주어진 항공권 정보를 바탕으로 여행 경로를 계산하는 것이다. 항상 "ICN" 공항에서 출발하며, 가능한 경로가 여러 개일 경우 알파벳 순서대로 경로를 선택해야 한다. 하지만 코드 작성