⚙️ 알고리즘/프로그래머스 8

[Python] 프로그래머스 - 방문 길이 (Lv. 2)

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 틀린 풀이 def solution(dirs): answer = set() # 처음 걸어본 길 --> 중복 제거하기 위해 자료형은 set를 활용 dirs = list(dirs) x, y = 0, 0 for dir in dirs: cur_x, cur_y = x, y if dir == "U": y += 1 elif dir == "L": x -= 1 elif dir == "R": x += ..

[Swift] 프로그래머스 - 큰 수 만들기 (Level. 2)

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 시간초과 풀이 (백트래킹) import Foundation func solution(_ number:String, _ k:Int) -> String { var answer = 0 var visited = Array(repeating: false, count: number.count) var number = number.map { String($0) } func dfs(_ target..

[Swift] 프로그래머스 - 단어 변환 (Level. 3)

문제 링크 :https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr DFS + 백트래킹 풀이 이 문제가 백트래킹인 근거를 먼저 찾아보자. 1) 순차적으로 알파벳 1개만 바꿔서 target 까지 가야하므로, 단계를 거칠 때마다 가지치기를 통해 경우의 수가 나뉨 2) 경우의 수를 나눌 때 이미 한번 판단한 word는 다시 판단하지 않아야하므로, 방문 여부를 체크할 visited 배열이 필요함 import Foundation func isValidCompa..

[Swift] 프로그래머스 - [1차] 비밀지도

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 - 엄청 문제 그대로 날것으로 풀었다.. 허허 func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] { var arr1 = arr1.map { String($0, radix: 2)} //2진수로 변환 var arr2 = arr2.map { String($0, radix: 2)} var answer: [String] ..

[Swift] 프로그래머스 - 문자열 압축 (Level. 2)

문제 https://school.programmers.co.kr/learn/courses/30/lessons/60057?language=swift 코드 import Foundation func solution(_ s:String) -> Int { let N = s.map { String($0) } if N.count == 1 { return 1 } var array = [N.count] //맨 처음 비교대상은 한번도 압축이 되지 않을때, 즉 문자열 자체의 길이 var answer = "" var prev = "" var count = 1 for step in 1...N.count/2 { //최대로 압축할 수 있는 범위가 문자열 절반의 길이 answer = "" prev = N[0.. N.count - 1..

[Swift] 프로그래머스 입문 - 겹치는 선분의 길이

문제 https://school.programmers.co.kr/learn/courses/30/lessons/120876 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요. lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다. 선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다. 제한사항 lines의 길이 = 3 lines의 원소의 길이 = 2 모든 선분은 길이가 1 ..

[Swift] 프로그래머스 코딩테스트 입문 - 구슬을 나누는 경우의 수

문제 설명 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요. 제한사항 1 ≤ balls ≤ 30 1 ≤ share ≤ 30 구슬을 고르는 순서는 고려하지 않습니다. share ≤ balls 입출력 예 balls share result 3 2 3 5 3 10 입출력 예 설명 입출력 예 #1 서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다. 입출력 예 #2 서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다. Hi..

[Swift] 프로그래머스 / 코딩테스트 입문 - 합성수 찾기

문제 내 풀이 func solution(_ n:Int) -> Int { var count = 0 var answer = 0 for i in 1...n {//1부터 10까지 for j in 1...i{ if i%j == 0{ count += 1 } } if count >= 3 { answer += 1 } count = 0 } return answer } 고차함수 활용 풀이 return (1...n).filter { i in (1...i).filter { i % $0 == 0 }.count >= 3 }.count 1) (1...n).filter : 1부터 n까지의 range에서 다음과 같은 조건으로 필터링하겠다. 2) i in (1...i).filter { i % $0 == 0 : 1부터 n까지 반복해서, ..

반응형