본문 바로가기

알고리즘 문제풀이202

[프로그래머스] 괄호 회전하기 (Swift) (스터디) https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 1. 적용 알고리즘과 문제 설명 구현 문제 괄호들로 구성된 하나의 문자열이 주어지면 이 괄호 문자열이 짝이 맞는 괄호들로 구성되어 있는 올바른 문자열인지 검사해야 한다. 근데? 이 문자열만 검사하는게 아님. 이 문자열을 한칸씩 오른쪽으로 밀어서 회전한 모든 문자열들에 대해서도 검사를 해야함 그래서 과연 몇개나 올바른 문자열인지 그 개수를 반환해야 함 이 문제에서 회전한 문자열을 구하는 데 사용한 방법을 그림으로 그려봤다 ^_^ (친절MAX) 이런 방식으로 문자열은 그대로 두고 인덱스의 시작 위치만 바꿔가면서 회전한 문자열을 순회했다 인덱스.. 2022. 2. 27.
[프로그래머스] 타겟 넘버 (Swift) https://programmers.co.kr/learn/courses/30/lessons/43165?language=swift 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr https://sio2whocode.tistory.com/171 [프로그래머스] 타겟 넘버 (C++) https://programmers.co.kr/learn/courses/30/lessons/43165?language=cpp 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를.. 2022. 2. 22.
[프로그래머스] 타겟 넘버 (C++) https://programmers.co.kr/learn/courses/30/lessons/43165?language=cpp 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr Level 2 DFS 일련의 자연수를 담은 배열이 하나 주어지고, 이들을 적절히 더하고 빼서 target과 동일해지는 경우의 수가 몇인지 반환하는 문제 접근방법 하나의 숫자 당 양수, 음수 두 가지 경우를 고려한다. DFS에 적용해보면, 하나의 수에 대해 양수/음수가 각각 하나의 노드인 셈이다. 각 노드의 인접한 노.. 2022. 2. 22.
[프로그래머스] 로또의 최고순위와 최저순위 (Swift) (스터디) https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 1. 적용 알고리즘과 문제 설명 문제 설명 1부터 45까지의 수를 중복없이 6개가 나열된 로또 번호가 2개 주어진다. (배열 2개, 중복없음은 하나의 로또 번호안에서만 해당) 하나는 민우의 손상된 로또 번호로, 0으로 표시된 수가 손상된 수이다. 다른 하나는 당첨 번호를 담은 로또이다. 이때, 민우가 가진 로또가 될.. 2022. 2. 19.
[프로그래머스] #139 하샤드 수 (Swift) https://programmers.co.kr/learn/courses/30/lessons/12947 코딩테스트 연습 - 하샤드 수 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하 programmers.co.kr level1 수, 구현 하나의 양의 정수 x를 받아서 각 자리수를 더한 값으로 x가 나누어떨어지면 true 아니면 false를 반환하는 문제 접근방법 C++로 풀이했을 때는 정수의 자리수를 나누는 방식으로 구현했다. (훨씬 빠름) (solution2) Swift로는 고차함수를 또 사용하고 싶어서, reduce로 풀려고 x : Int -.. 2022. 2. 18.
[프로그래머스] #138 문자열 내 마음대로 정렬하기 (Swift) https://programmers.co.kr/learn/courses/30/lessons/12915?language=swift 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱 programmers.co.kr 정렬 level1 문자열 배열을 인덱스 n번째 문자를 기준으로 사전순으로 정렬한 배열을 반환하는 문제 접근방법 사용자 정의 정렬이다. C++에서 sort 라이브러리 함수에 자체적으로 구현한 compare함수를 전달하는 것과 같은 방식으로 swift에서도 Array의 s.. 2022. 2. 18.
[프로그래머스] #137 소수 만들기 (Swift) https://programmers.co.kr/learn/courses/30/lessons/12977?language=swift 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 구현 (조합) level 1 자연수를 담은 배열이 주어지고 그 중 3개의 값을 더해 소수인지 아닌지 판별 -> 더해서 소수인 개수를 반환하는 문제 소수 판별 + 조합 문제 이다. 접근방법 소수판별에는 에라토스테네스의 체를 사용하여 시간적 효율을 높이 구할 수도 있고, 제곱근을 사용하여 범위를 줄여 검사할 수도 있지만.. 2022. 2. 16.
[프로그래머스] #136 로또의 최고순위와 최저순위 (Swift) https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 구현 level 1 1부터 45까지의 수를 중복없이 6개가 나열된 로또 번호가 2개 주어진다. (배열 2개, 중복없음은 하나의 로또 번호안에서만 해당) 하나는 민우의 손상된 로또 번호로, 0으로 표시된 수가 손상된 수이다. 다른 하나는 당첨 번호를 담은 로또이다. 이때, 민우가 가진 로또가 될 수 있는 최고 순위와 .. 2022. 2. 16.
[프로그래머스] #135 예산 (Swift) programmers.co.kr/learn/courses/30/lessons/12982 코딩테스트 연습 - 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 programmers.co.kr 1. 적용 알고리즘과 문제 설명 그리디 알고리즘을 적용하는 문제이다. 그리디 알고리즘은 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법이다. 대표적인 문제로 knapsack 문제가 있는데, 이 문제는 0-1 knapsack 문제와 유사하지만 가방 속 아이템들의(여기서는 각 부서)가치가 아닌 아이템의 갯수만 많으면 되기 때문에 0-1 knap.. 2022. 2. 11.