본문 바로가기

알고리즘 & 문제풀이

(21)
프로그래머스 - L1 키패드 누르기 설계위치를 나타내고 거리 계산이 되는 객체 필요왼쪽, 오른쪽 현 위치를 나타내는 변수 및 업데이트 필요키패드들의 위치를 담고 있는 변수 필요numbers 순회하여 진행 git : 키패드 누르기문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67256 문제 풀이미리 정의 된 값들의 값 정의문제의 제시 된 키패드대로 keypadPositions 딕셔너리에 값 할당오른쪽 손, 왼쪽 손의 위치 초기화numbers를 순회하여, 기본적으로 오른손으로 수행 위치이면 수행, 왼쪽 수행 위치이면 수행하며, 거리 계산이 필요한 경우 거리 계산 후 규칙대로 수행결과 반환import Foundation func solution(_ numbers:[Int], _ ..
프로그래머스 - L2 예상 대진표 설계짝수인 경우 자신의 값 - 1 과 대결하고, 홀수인 경우 자신의 값 + 1과 대결다음 라운드 배정 받는 수는 자신의 값 / 2 올림위 규칙을 반복하여 대결 번호가 겹치는 경우 break 및 반환 git : 예상 대진표문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12985 문제 풀이frontOpponent 은 frontNumber의 상대 번호, backOpponent은 backNumber의 상대 번호if(frontOpponent == backNumber) 인 경우 a, b가 대결하게 되는 경우 이므로, break그렇지 않은 경우는 다음 라운드시 배정받는 번호를 부여 및 라운드 수를 올린다. import Foundation // 홀수는 ..
프로그래머스 - L1 옹알이 (2) 설계옹알이 문자열에서 문자를 하나씩 순회하여 빈 문자열에 삽입삽입 될 때마다 가능한 옹알이 인지 확인가능하게 되면 문자열을 비어주고, 인덱스 체크최종적으로 문자열이 비어있으면 가능 옹알이 git : 옹알이 (2)문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133499문제 풀이possibleBabble 가능한 옹알이를 상수 배열 선언babble.reduce( …. ) 문자를 하나씩 순회하면서 문자를 더 해나간다. 가능한 옹알이 단어 일 경우 문자열을 빈 문자열로 초기화, 인덱스 저장해놓기결과적으로 문자열이 비어있으면 가능한 옹알이let possibleBabble = ["aya", "ye", "woo", "ma"] func solution(..
프로그래머스 - L2 짝지어 제거하기 설계문자열을 순회해서 stack에 넣기 전에 맨 윗부분을 검사해서 같은 경우 pop, 다른 경우 push순회가 끝났을 때 stack이 빈 경우면 조건에 만족 git : 짝지어 제거하기문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12973문제 풀이if let peek = stack.last 에서 nil 인 경우 stack이 빈 경우이므로 stack.append(alphabet) 추가하기nil이 아닌 경우 peek 값과 순회하는 알파벳을 확인하여 같은 경우면 연속적이기 때문에 pop 아닌 경우 추가해주기func solution(_ s:String) -> Int{ var answer:Int = 0 var stack: [String] = [] ..
알고리즘 - Big-O 시간복잡도에 관해 포스팅 한다 한다 말씀만 드리고 이제야 글을 쓰게 됩니다! 꾸벅..오늘은 시간복잡도 , Big-O 에 관해 살펴보겠습니다. git : 예제소스Big-O ?Big-O 표기법은 알고리즘 성능을 수학적으로 표현한 표기법입니다.알고리즘 성능은 얼마나 많이 쓰냐 ( 공간 ), 얼마나 걸리냐 ( 시간 )에 따라 결정됩니다. 그래서 Big - O 표기법으로 시간 복잡도 / 공간 복잡도를 표기합니다.시간 복잡도는 입력값과 연산 수행 시간의 상관관계를 나타냅니다.그럼 아래에서 한번은 봤을법한 시간 복잡도의 표기법을 보겠습니다. O(1)Big-O 표기법은 O( ) 안에 표기를 해줍니다!해당 표기법은 앞으로 보나 뒤로 보나 옆으로 보나 1 입니다….맞습니다 위에서 말씀드렸지만, 시간복잡도는 입력값에 따른 ..
프로그래머스 - L2 피보나치 수 설계n 만큼 배열을 생성해 2…n 범위를 순회하여, 피보나치 규칙에 맞게 배열을 채워나가는 방법! git : 피보나치 수문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12945문제 풀이원하는 크기만큼 배열을 생성0, 1번째 기본 0, 1 채워넣기입력 받은 수 만큼 for 순회하여 생성 된 배열을 채워준다.배열의 맨 마지막 수을 반환 값으로 출력// n은 2 이상 100,000 이하의 자연수 func solution(_ n:Int) -> Int { var fibonacciArray = Array(repeating: 0, count: n + 1) fibonacciArray[0] = 0 fibonacciArray[1] = 1 for index ..
프로그래머스 - L2 최댓값과 최솟값 아직 많이 부족하나 레벨 2 관련 문제들도 시작하였습니다 하하!설계문자열을 split하여 나눠 순회하여 min, max 판별하기! git : 최댓값과 최솟값문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12939문제 풀이설계대로 진행하였으며, 음수 문자의 Int 캐스팅 또한 지원합니다!func solution(_ s:String) -> String { let splitArray = s.split(separator: " ") var min = Int.max var max = Int.min splitArray.forEach{ item in guard let number = Int(item) else { return } if(min > numb..
프로그래머스 - L1 기사단원의 무기 설계약수 개수를 구할 수만 있다면, 스무스하게 풀릴거 같습니다.소수 개수 판단법 확인했을 때, number의 제곱근만큼 확인했던 기억을 살려 활용해보자. git : 기사단원의 무기문제 : https://school.programmers.co.kr/learn/courses/30/lessons/136798문제 풀이numbers 를 순회하여 index + 1의 약수의 개수를 넣어주기약수 개수 반환 알고리즘은 number의 제곱근만큼 반복하여 나눠줘서 나머지가 없는 경우 카운팅을 해주는데, 예를들어 16의 약수 개수를 카운팅한다고 했을때, 2 * 8 은 두 개로 카운팅되지만, 4 * 4는 하나로 카운팅해야하므로, 나눈 값과 몫을 확인해야한다!약수 개수가 채워진 numbers를 limit 이하 만큼 필터해준 뒤,..