본문 바로가기
728x90

알고리즘99

프로그래머스 - 겹치는 선분의 길이 https://school.programmers.co.kr/learn/courses/30/lessons/120876 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 좌표의 위치를 저장 해둘 배열을 만들고 3개의 좌표 위치를 모두 저장한다. 이렇게 저장하고 나면 해당 좌표에 저장되는 좌표가 2개 이상 되는 경우를 카운팅 func solution(_ lines:[[Int]]) -> Int { // 원소의 start와 end의 범위가 -100 ~ 100 사이 이므로 200개의 count var table = Array(repeating: [], count:.. 2023. 11. 30.
프로그래머스: 해시 - 베스트앨범 https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 장르별 많이 재생된 두곡 씩 추리는 문제 해시테이블의 인덱스를 어떻게 이용해야 하나 고민하다가 장르를 키로 갖고, 인덱스와 재싱수를 딕셔너리 벨류로 갖는 딕셔너리를 만들었는데 그 뒤로는 생각이 너무 많아 쉽사리 코드로 옮기지를 못했다... 시간을 너무 소비하였고 다른 사람의 풀이로 코드를 이해해보기로 했다. 결국 문제를 하나씩 분리해서 그대로 코드로 작성하면 되는 것이었음. 앞으로는 너무 생.. 2023. 11. 29.
프로그래머스: 연습문제 - 최솟값 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12941 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 두 개의 배열에서 각자 숫자를 가져와 곱한 합의 최솟값을 구하는데 제일 작은 수와 제일 큰 수를 곱하면 최소합을 구할 수 있다. func solution(_ A:[Int], _ B:[Int]) -> Int { var answer: Int = 0 let acs = B.sorted(by: ) for i in 0.. 2023. 11. 27.
빅 오 Big O? 어떠한 문제를 해결하는데에 사용되는 자료 구조와 알고리즘의 효율성을 설명하기 위한 것으로 수학적 개념을 차용하여 빅 오 표기법 이라 부른다. 알고리즘의 효율성을 평가할 때에는 두 가지의 기준으로 나뉘는데, 한정된 메모리 공간을 분석하는 공간 분석과 알고리즘이 어느 정도 빠른지 알아보는 시간 분석이 있다. 시간과 공간 복잡성을 계산할 때 최상, 최악, 평균 복잡성을 고려하게 되지만, 보통은 최악의 시나리오를 의미한다. 이는 비관적인 접근이 유용한 도구일 수 있기 때문이다. 알고리즘이 얼마나 비효율적인지 알면 최악을 대비함과 동시에 알고리즘의 선택에 중요한 영향을 미칠 수 있다. 빅 오의 본질 데이터 원소가 N개 일 때 알고리즘에 몇 단계가 필요할까? 빅 오가 진정 의미하는 것은 데이터가 늘어날.. 2023. 10. 19.
프로그래머스: 월간 코드 챌린지 시즌3 - n^2 배열 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/87390#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시간초과로 혼자 풀기 실패 이 글을 보고 이해했다 -> https://hogumachu.tistory.com/21 이중for문을 만들어 이용할 필요 없이 딱 필요한 부분의 값만 구하여 리턴하는데 left와 right값과 n의 몫과 나머지를 이용하면 값을 만들어 낼 수 있다. // 시간 초과 코드 func solution(_ n:Int, _ left:Int64, _ right:Int64.. 2023. 10. 13.
프로그래머스: 완전탐색 - 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 brown과 yellow의 합이 완성된 배열의 크기이며, yellow를 brown으로 감싸야 하므로 최소 높이는 3부터 시작 한다. func solution(_ brown:Int, _ yellow:Int) -> [Int] { let totalCellCount = brown + yellow var number = 3 while true { if (totalCellCount % number !=.. 2023. 10. 7.
프로그래머스: 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 func solution(_ s:String) -> [Int] { var removeCount = 0 var radixCount = 0 var currentS = s while currentS != "1" { var zeroCount = 0 for x in currentS { if x == "0" { zeroCount += 1 removeCount += 1 } } let radix = Str.. 2023. 10. 6.
프로그래머스: 기사단원의 무기 https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음 풀었던 방식 -> func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int { var divisors = 0 for i in 1 ... number { var count = 0 for j in 1 ... i { if i % j == 0 { count += 1 } } if count > limit { count = power } div.. 2023. 10. 4.
MD5 MD5란? Message-Digest algorithm 5의 약자로 암호화 해시 알고리즘 중 하나로 임의의 길이의 문자 값을 받아서 해시값을 출력해준다. 단방향 암호화이기 때문에 출력값에서 입력값으로 복원하기는 일반적으로 불가능하다. 복잡한 수학적 해시 알고리즘을 통해 32자의 문자열로 반환되며 같은 값은 항상 같은 출력값이 나온다. 또한 고속 연산이 가능하고 읨의로 변경된 패턴에 대해 충돌 가능성이 낮기 때문에 주로 파일의 무결성을 확인하는데 주로 사용된다. 권장되지는 않지만 MD5를 이용해 보안용도로 사용할 때에는 반드시 salt를 붙여서 사용해야한다. *salt: 입력된 값에 임의의 값을 붙인다든지, 암호화 한 값에 또다른 값을 붙여서 암호화 한다든지... 이름이 왜 Salt냐면 음식에 소금을 뿌리.. 2023. 9. 14.