SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

PS and 자료구조 10

깊이/너비 우선 탐색(DFS/BFS) / 타겟 넘버 / C++

문제 설명 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 제한 사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연수입니다. 입출력 예 numbers target return [1, 1, 1, 1, 1] 3 5 [4, 1, 2, 1] 5 2 문제 이해 처음부터 끝자리 수까지 더해야 한다. 각 자리마다 음수 혹은..

복잡도 개선 / 금고털이 / C++

문제 루팡은 배낭을 하나 메고 은행금고에 들어왔다. 금고 안에는 값비싼 금, 은, 백금 등의 귀금속 덩어리가 잔뜩 들어있다. 배낭은 W ㎏까지 담을 수 있다. 각 금속의 무게와 무게당 가격이 주어졌을 때 배낭을 채울 수 있는 가장 값비싼 가격은 얼마인가? 루팡은 전동톱을 가지고 있으며 귀금속은 톱으로 자르면 잘려진 부분의 무게만큼 가치를 가진다. 제약조건 1 ≤ N ≤ 106인 정수 1 ≤ W ≤ 104인 정수 1 ≤ Mi, Pi ≤ 104인 정수 입력형식 첫 번째 줄에 배낭의 무게 W와 귀금속의 종류 N이 주어진다. i + 1 (1 ≤ i ≤ N)번째 줄에는 i번째 금속의 무게 Mi와 무게당 가격 Pi가 주어진다. 출력형식 첫 번째 줄에 배낭에 담을 수 있는 가장 비싼 가격을 출력하라. 입력예제1 10..

[정렬] 가장 큰 수

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해 주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 numbers return [6, 10,..

JadenCase 문자열 만들기

문제 설명 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해 주세요. 제한 조건 s는 길이 1 이상 200 이하인 문자열입니다. s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다. 숫자는 단어의 첫 문자로만 나옵니다. 숫자로만 이루어진 단어는 없습니다. 공백문자가 연속해서 나올 수 있습니다. 입출력 예 s return "3people unFollowed me" "3people Unfollowed Me" "for the last week" ..

유클리드 알고리즘

최대공약수(Greatest Common Divisor) : 주어지는 두 정수의 약수 중에서 가장 큰 공통약수 ex) 280 과 30 의 GCD는 10이다. . 280의 약수 : 1, 2, 4, 5, 7, 8, 10, 14, 20, 28, 40, 56, 70, 140, 280 . 30의 약수 : 1, 2, 3, 5, 6, 10, 15, 30 - 소인수분해를 통해 GCD를 구할 수 있다. 2 | 280 30 5 | 140 15 --------------- 28 3 최대공약수 = 2 * 5 = 10 GCD 관련 법칙 - GCD(u,v) = GCD(u-v, v) if u > v - GCD(u,v) = GCD(v, u) - GCD(u,0) = u 위 법칙으로 아래와 같은 알고리즘을 구성할 수 있다.(유클리드 알고..

PS and 자료구조 2022.08.25

알고리즘 개요

알고리즘이란 무엇인가? 알고리즘(Algorithm)의 정의 - 주어진 문제를 해결하기 위해 잘 정의된 동작들의 유한 집합 자료구조 - 알고리즘의 객체 - 구조화되고 조직화된 자료의 저장/추출/관리 방법 - 추상데이터타입 (Abstracted Data Type) - 배열, 스택, 큐, 트리.... 알고리즘 선택 시 주의사항 - 하나의 문제에 대해 여러 알고리즘이 존재 - 절대적인 최상의 알고리즘은 없다. - 주어진 문제와 환경을 먼저 숙지하라. - 속도와 자원(resource)의 상관관계 - 단순한 알고리즘이 좋다. . 지나친 속도결벽증은 금물 . 알고리즘의 사용빈도에 따른 선택 경험적 분석과 수학적 분석 - 분석은 알고리즘을 정확히 선택하기 위한 방법 - 시간 소요량 vs 공간 소요량 1) 경험적 분석(..

PS and 자료구조 2022.07.13

BinaryGap

난이도 : Easy 번역 : 문제 양의 정수 N 내의 이진 간격은 N의 이진 표현에서 양쪽 끝에서 1로 둘러싸인 연속 0의 최대 시퀀스입니다. 예를 들어, 숫자 9는 이진 표현 1001을 갖고 길이가 2인 이진 간격을 포함합니다. 숫자 529는 이진 표현이 1000010001이고 두 개의 이진 간격(길이 4 중 하나와 길이 3 중 하나)을 포함합니다. 숫자 20에는 이진 표현 10100이 있고 다음을 포함합니다. 길이가 1인 하나의 이진 간격. 숫자 15는 이진 표현 1111을 가지며 이진 간격이 없습니다. 숫자 32는 이진수 표현이 100000이고 이진수 간격이 없습니다. 함수 작성: int 솔루션(int N); 양의 정수 N이 주어지면 가장 긴 이진 간격의 길이를 반환합니다. N에 이진 간격이 포함되..

최적의 행렬 곱셈

https://programmers.co.kr/learn/courses/30/lessons/12942 코딩테스트 연습 - 최적의 행렬 곱셈 크기가 a by b인 행렬과 크기가 b by c 인 행렬이 있을 때, 두 행렬을 곱하기 위해서는 총 a x b x c 번 곱셈해야합니다. 예를 들어서 크기가 5 by 3인 행렬과 크기가 3 by 2인 행렬을 곱할때는 총 5 x 3 x 2 = programmers.co.kr 난이도 : Level 4 잡동사니 : 최적의 행렬 곱셈 관련 많은 풀이들이 있는데 굳이 이 글을 작성하게 된 이유는 설명이 잘되어 있음에도 난 도대체 이해가 안돼서 멘붕이 왔다. 약간 오기도 생겨서 풀릴 때까지 풀어보잔 식으로 들이 파기 시작했다. 연쇄 행렬 최소곱셈 알고리즘에 대한 설명이 잘되어 ..

1. 프로그래밍 스타일, 반복과 재귀 - 1.2 선형 탐색에서 Sentinel(보초) 사용

어떤 목적을 달성하기 위한 과정들에 다양한 알고리즘이 존재하고 우리는 시간복잡도가 가장 낮은 알고리즘을 선택하여 사용한다. 시간복잡도 - 알고리즘의 성능을 설명(연산을 수치화) 알고리즘의 실행시간은 컴퓨터가 알고리즘 코드를 실행하는 속도에 의존하며 각 알고리즘의 속도의 평가는 중요하지 않은 상수와 계수들을 제거하여 실행시간에서 중요한 성장률(입력값의 크기에 따른 함수의 증가량) - 점금적 표기법(Asymptotic notation) - 을 측정하여 판단할 수 있다. 이때 최상, 평균으로 측정 시 평가하기가 까다롭기에 최악일 경우를 판단하여 평균과 가까운 성능으로 예측할 수 있다.[빅오 표기법 (Big-O Notation)] 예) N개의 수열을 정렬하는 어떤 프로그램, 즉 이 숫자들을 오름차순으로 배치하는..

PS and 자료구조 2022.03.28

자료구조 스터디 시작!

일전에 고향으로 내려가 대학교 때 수업 들었던 자료구조 책을 발견하였다. 요즘처럼 자료구조와 PS(problem solving)가 개발자 간에 화제가 된 건, 업체들이 입사 시 코딩 능력을 확인하기 위해 알고리즘 테스트를 채택하기 시작하면서부터 이다. 이직 시 필수 능력은 아니지만 이력서 작성 능력들이 나날이 증가하다 보니 작성된 경력기술서 및 프로젝트 경험이 참여는 했으나 기여도가 어느 정도인지 알 수가 없기에 구분까지는 아니더라도 최소한의 허들이 되고 있다. 나 같은 경우 (늙은 개발자를 뽑아주는 곳도 없겠지만) 이직을 하려는 것이 아니라 아래 2021년 회고를 하면서 개발자로서 기술적 성장을 하지 못했다는 생각에 https://jabdon4ny.tistory.com/10 2021년 회고 2021년 ..

PS and 자료구조 2022.03.26
320x100