algorithm/CodingTest 21

코딩테스트 준비: Java 기본 문법

1. 기본 문법변수 선언과 초기화int a = 10;double b = 3.14;char c = 'A';String s = "Hello"; 조건문if (a > 5) { System.out.println("a is greater than 5");} else if (a == 5) { System.out.println("a is 5");} else { System.out.println("a is less than 5");} 반복문for (int i = 0; i   2. 자료 구조배열int[] arr = new int[5];arr[0] = 1;arr[1] = 2;int[] arr2 = {1, 2, 3, 4, 5};  ArrayListimport java.util.ArrayList;ArrayLis..

프로그래머스 > 코딩테스트 연습 > 정렬 > 가장 큰 수 (Python3)

https://programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr# 틀린 코드def solution(numbers): return ''.join(map(str,sorted(numbers, key=lambda x : x*pow(10,(len(str(max(numbers)))-len(str(x)))), reverse=True)))3과 30중에 3이 큰 걸 캐치하지 못해 틀림   # 정답 코드def solution(numbers): return str(int(''.join..

[GDSC Week4-1] 백준 9095번:: 1, 2, 3 더하기 (C++)

* 생각한 아이디어 및 문제 풀이 다이나믹 프로그래밍을 통해 문제를 푸는 방법은 1, 2, 3의 합을 미리 수동으로 구해놓아야 한다는 것이 시간을 아낀다는 점의 핵심이다. 1을 1, 2, 3의 합으로 만드는 방법 : 1가지(1)로 dp[1] = 1 2를 1, 2, 3의 합으로 만드는 방법 : 2가지(1+1, 2)로 dp[2] = 2 3을 1, 2, 3의 합으로 만드는 방법 : 4가지(1+2, 2+1, 1+1+1, 3) 그리고 +1된 다음수부터는 이렇게 1, 2, 3을 합한 방법에서 값을 +1씩 더하면 되는 것이므로 dp[i] = dp[i-1] + dp[i-2] + dp[i-3]의 공식으로 만들어지는 것을 알 수 있다. * 코드 #include using namespace std; int main(){ i..

C++ 알고리즘:: 다이나믹 프로그래밍

I. 다이나믹 프로그래밍 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법이다. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다는 것이 핵심이다. 즉, 하나의 문제는 단 한 번만 풀도록 하는 알고리즘이다. (우리가 평소에 문제를 풀이할 때 효율적인 방법으로 고안할 필요가 있다.) 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식(탑다운-하향식, 바텀업-상향식)으로 구성된다. 매우 비효율적인 문제더라도 다이나믹으로 획기적으로 시간을 줄일 수 있다. 다이나믹 프로그래밍은 동적 계획법이라고도 부른다. 일반적인 프로그래밍 분야에서는 동적이란 프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당하는 기법을 의미하지만, 다이나..

C++ 알고리즘:: 완전 탐색(Brute-Force) & 백트레킹(Backtracking)

완전 탐색(Brute-Force) 완전히 탐색, 즉 가능한 경우의 수를 모두 조사하는 방법이다. 예시) 번호 자물쇠 (경우의 수 0000~9999). 최악의 경우 10000*1초 = 대략 166분 그러나 컴퓨터 연산속도는 1초에 1억(=10^8) 백만(1,000,000)은 10^6 완전 탐색의 장단점 장점: 답을 무조건 찾을 수 있다. 단점: 답을 찾는데 시간이 많이 걸린다. 따라서, 탐색할 요소가 많을 때는 다른 방법을 사용하는 것이 현명하겠지만 탐색할 요소가 적거나, N제한이 작은 경우에는 완전 탐색만큼 정확한 탐색 방법은 없다. 또한 완전 탐색 문제를 풀 때에는 시간 제한을 체크하는 것이 중요하다. 재귀함수 어떤 함수에서 자기 자신을 호출하는 함수이다. (인셉션에서의 꿈 개념과 동일하다) 재귀함수에..

[GDSC Week2-4] 백준 3078번:: 좋은친구 (C++)

* 생각한 아이디어 및 문제 풀이 0. 이름 길이별로 벡터를 생성한다. 1. 등수가 k만큼 차이나는 사람과 이름 길이를 비교하고 해당 길이의 벡터에 ++을 한다. 2. 만약 큐의 사이즈가 K 이상이라면 비교 숫자를 벗어난 것이므로 큐의 맨 앞에 위치한 문구를 삭제한다. 3. 이를 반복해서 좋은 친구를 출력한다. * 코드 #include #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, K, len; long long Good=0; string input; vector v(21); queue q; cin >> N >> K; for(..

[GDSC Week2-3] 백준 2346번:: 풍선 터뜨리기 (C++)

* 생각한 아이디어 및 문제 풀이 1. 시작과 끝이 이어진 문제라 deque으로 풀어야 겠다고 생각했다. 2. 풍선의 값은 기본적으로 배열에 넣고, deque에는 각각 index를 넣는다. 3. 풍선 터뜨리고 움직이는 수가 양수라면 먼저 터뜨리고 움직이므로 1을 뺀만큼 이동을 한다. 4. 음수라면 그대로 취한만큼 이동한다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); deque deq; vector result; int N, ballonValue[1001]; cin >> N; for(int i=0; i> ballonValue[i]; } for(int i=0..

[GDSC Week2-2] 백준 10828번:: 스택 (C++)

* 생각한 아이디어 및 문제 풀이 1. 전체를 string으로 받고 각각 char stack으로 넣기로 했다. 2. 괄호 (~)가 하나의 막대인 것이므로 '('가 들어오면 스택에 넣는다. 3. 그리고 다음에 들어오는 ')'로 비교를 한다. 만약 바로 '('가 있었다면 이는 레이저이므로 기존 stack 사이즈만큼 새 조각이 생기는 것을 이용한다. 4. 만약 레이저가 아니면, 그냥 쇠막대기 이므로 쇠막대기 개수 +1만 한다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); stack s; int bar = 0; string input;..

[GDSC Week2-1] 백준 10828번:: 스택 (C++)

* 생각한 아이디어 및 문제 풀이 0. 처음에 명령의 수는 int로 입력받는다. 1. 각 명령은 STRING으로 받아서 앞에 해당하는 명령이 있으면 그 부분을 각 명령에 맞게 실행한다. 2. 명령을 받는 것은 각각의 문자수 다음만큼의 수부터 끝까지 받고, substr로 처리한다. 3. 처음에는 문장 전체를 받는다고 생각했으나, 어차피 띄어쓰기가 있으니 그냥 해당하는 문자를 받으면 다음 숫자를 입력받아 명령을 시행해야겠다고 생각했다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, num; cin >> N; string ..