일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- System
- 스택
- web
- 암호수학
- PHP
- 두근두근 자료구조
- c언어
- 파일 시스템
- ftz level13
- 미로 탐색 알고리즘
- pwnable.kr
- LoB
- windosws wbcs
- OSI
- 백준
- Stack
- 자료구조
- ftz
- Java
- 시간복잡도
- 재귀
- SWiFT
- 정렬 알고리즘
- 파이썬
- level13
- C
- 큐
- HTML
- windosw 문자열
- War Game
- Today
- Total
목록Programming/Algorithm & Data Structure (60)
나의 기록, 현진록
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 못 풀겠어서 풀이를 검색했고 이걸 왜 못 풀었나 싶어서 죄책감과 함께 오랜만에 글 씁니다. 문제 풀이 근무 태도와 동료 평가 점수 "모두" 다른 사원보다 낮을 경우 인센티브를 제외한다는 조건을 보고 어떤 방식으로든(이중 포문, 정렬 등) 탐색을 생각했다. 하지만 score에 길이가 최대 10만이기 때문에 O(N)으로 풀 수 있는 방법을 생각했는데 생각이 나질 않았다. 근무 태도와 동료 평가 점수 두 가지를 고려해야 하기 때문에 어려웠다. 정렬을 사용한다는 건 알았는데 말이지... 인센티브를 제외할 놈만 쉽게 ..
시간 초과 문제를 해결하기 위해 고민을 많이 했다. queue의 합을 구하기 위해 reduce나 반복문을 사용하면 queue의 길이만큼 연산하게 되니O(n), 처음 queue의 합을 구하고 합에서 요소만큼 더하기 빼기 연산으로 하면 O(1) queue를 쓰게 되면 removeFirst(), append() 연산 할 때마다 시간 복잡도가 증가함O(n) -> queue 두 개를 합쳐서 dequeue 사용O(1) import Foundation func solution(_ queue1:[Int], _ queue2:[Int]) -> Int { var result = 0 var sumQ1 = 0 var sumQ2 = 0 var dequeue = queue1 + queue2 var dequeuelen = deque..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 기사단원의 번호를 순회하기 위한 포문과 약수를 구하기 위한 포문 두 개의 이중 포문으로 구현하면 number가 최댓값인 100,000일 때 시간복잡도는 백만의 제곱이 되므로 시간초과이다. 메모라이징을 써야할지 고민했는데(아직 감이 없음...) 수학을 응용한 방법이 있었다. number가 10일 때의 약수는 1, 2, 5 10 number가 16일 때의 약수는 1, 2, 4, 8, 16 number가 20일 때의 약수는 1, 2, 5, 10, 20 ...... 무언가 1부터 number까지 포문이 순회하지..
풀이 0부터 d만큼의 이중 포문으로 구현을 했으나 d의 최댓값이 백만이면 시간 복잡도가 백만의 제곱이 되어버린다...시간초과 발생 점의 위치가 거리 d 만큼의 길이 내에 있어야 한다. 피타고라스 정의 d^2 = x^2 + y^2 를 이용하면 두개만 알면 나머지 하나를 구할 수 있다. d는 기본 값으로 주어지고 x는 포문으로 값을 받으면 단일 포문으로 y를 구할 수 있게 된다. sqrt(d^2 - x^2)은 y의 최댓값이 되고 y또한 k의 배수이기 때문에 k만큼 나누어 갯수를 구한다. 코드 func solution(_ k:Int, _ d:Int) -> Int64 { var count: Int64 = 0 let result = d * d for i in stride(from: 0, through: d, by..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 물(0)을 기준으로 칼로리가 높은 순부터 양쪽에 음식을 배치하는 방법으로 구현하였다. 문자열.insert()에 Character 형이 들어가야 하고 Int 형이 Character 형으로 바로 변환이 되지 않기 때문에 Int -> String -> Character 순으로 바꾸었다. 코드 func solution(_ food:[Int]) -> String { var str = "0" for (index, count) in food[1..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr places 행 길이 == 대기실의 수 places 열 길이 == 대기실 세로 길이 places 원소의 길이 == 대기실 가로의 길이 P == 응시자, O == 빈 테이블, X == 파티션 각 대기실 마다 2차원 배열로 표현하기 상하좌우 4방향 처음에 어렵게 접근 했던 것 같다. "P"위치를 발견하면 상하좌우 2칸 대각선 1칸씩에 P가 있는지 "탐색"하는 방법으로 문제를 해결하려고 했었다. (X를 만나면 continue.....) 그러나 이렇게 하면 8개의 방향(상하좌우, 네 방향 대각선)으로 인덱스를 처리해..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분리하기 - str1과 str2 두글자씩 분리하기 대문자 또는 소문자 변환, 공백, 숫자, 특수문자, 두글자로 분해 분리된 str1과 str2으로 Set를 만들어 중복 없는 집합을 만듦 분리된 집합의 각 요소마다 str1, str2에 포함된 갯수를 구함 두 집합(str1, str2)에 포함된 갯수가 같을 경우, 다를 경우 교집합과 합집합에 추가할 요소가 다르게 구현 갯수가 같을 경우 교집합, 합집합에 갯수만큼 추가 갯수가 다를 경우 각 집합의 포함된 갯수의 최솟값 만큼은 교집합, 최대값 만큼 합집합에 추가 교..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr orders의 주문마다 메뉴를 조합할 수 있는 모든 경우의 수를 구해야 한다. 조합한 메뉴의 수가 course에 포함된 수일 경우의 갯수를 세어 저장한다. (아래 코드는 딕셔너리를 사용하였음) 모든 경우의 조합을 만들기, 오름차순으로 정렬, 중복(AB와 BA)처리를 주의하자 import Foundation func solution(_ orders:[String], _ course:[Int]) -> [String] { var records = [[String]:Int]() var result = [String]..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 실패율을 저장할 스테이지 튜플 배열 생성 [(스테이지 번호, 실패율)] 현재 스테이지 클리어한 사람 구하기 현재 스테이지인 사람 구하기 = 전체 스테이지 수에서 현재 스테이지 클리어한 사람 빼기 실패율(스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수) 구해서 튜플 배열에 추가 스테이지 번호를 실패율 내림차순으로 정렬한다. 만약 실패율이 같으면 스테이지 번호가 낮은 게 우선순위이다. 코드 처음 작성한 정답 제출 시 5, 9, 22번이 시간초과가 발생하였다. i..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 1. 키패드에서는 10(0~9)개의 숫자만 표현하기 때문에 딕셔너리로 숫자마다 좌표를 정의했다. 2. numbers의 각 요소가 1, 4, 7에 해당하는 경우는 왼손이며, 왼손의 현재 위치를 수정하고, 3, 6, 9에 해당하는 경우 오른손이며, 오른손의 현재 위치를 수정한다. 3. numbers의 각 요소가 2, 5, 8 ,0에 해당하는 경우 왼손의 위치와 오른손의 위치를 숫자와의 위치와 비교하여 거리를 구한다. 이 때 거리는 |(x1 - x2)| + |(y1 - y2)|이다. 4. 만약 왼손으로부터..