no image
[알고리즘 일기] 41. 체육복
코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr (programmers-greedy). 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학..
2021.06.11
no image
[알고리즘 일기] 40. 출근하는 방법1
출근하는 방법1 영훈이는 출근할 때 계단을 통해 사무실로 가는데요. 급할 때는 두 계단씩 올라가고 여유 있을 때는 한 계단씩 올라 갑니다. 어느 날 문득, 호기심이 생겼습니다. 한 계단 또는 두 계단씩 올라가서 끝까지 올라가는 방법은 총 몇 가지가 있을까요? 계단 4개를 올라간다고 가정하면, 이런 방법들이 있습니다. 1, 1, 1, 1 2, 1, 1 1, 2, 1 1, 1, 2 2, 2 총 5개 방법이 있네요. 함수 staircase는 파라미터로 계단 수 n을 받고, 올라갈 수 있는 방법의 수를 효율적으로 찾아서 리턴합니다. ❧ 테스트 셋 def staircase(n): # Code # Test print(staircase(0)) print(staircase(6)) print(staircase(15)) ..
2021.06.10
no image
[알고리즘 일기] 39. 삼송전자 주식 분석
삼송전자 주식 분석 태호는 주식 분석이 취미입니다. 요즘 제일 핫한 종목은 삼송전자인데요. 삼송전자의 주식을 딱 한 번 사고 팔았다면 최대 얼마의 수익이 가능했을지 궁금합니다. 그것을 계산해 주는 O(n) O(n) 함수 max_profit을 작성하세요. max_profit은 파라미터로 일별 주식 가격이 들어 있는 리스트 stock_prices를 받고 최대 수익을 리턴합니다. 주식은 딱 한 번만 사고 한 번만 팝니다. 그리고 사는 당일에 팔 수는 없습니다. 하나의 예시로, 지난 6일간 삼송전자의 주식 가격이 이렇다고 가정합니다. max_profit([7, 1, 5, 3, 6, 4])이 기간 동안 낼 수 있는 최대 수익은 둘째 날 1에 사서 다섯째 날 6에 팔면 총 5의 수익이 생깁니다. ❧ 테스트 셋 de..
2021.06.08
no image
[알고리즘 일기] 38. 투자 귀재 규식이3
투자 귀재 규식이3 이미 sublist_max 함수를 각각 Brute Force과 Divide and Conquer 방식으로 작성했는데요. Brute Force로 풀었을 때는 시간 복잡도가 O(n2), Divide and Conquer를 사용했을 때는 O(nlgn)였습니다. 이에는 시간 복잡도를 O(n)로 한 번 더 단축해보세요! ❧ 테스트 셋 def sublist_max(profits): # Code # Test print(sublist_max([7, -3, 4, -8])) print(sublist_max([-2, -3, 4, -1, -2, 1, 5, -3, -1])) ❧ 출력 예시 8 7 ❧ 정답 def sublist_max(profits): # max_profit_so_far : 현재 인덱스 이전까..
2021.06.07
no image
[알고리즘 일기] 37. 투자 귀재 규식이2
7 28 22 16 투자 귀재 규식이2 저번 문제에서 sublist_max 함수를 Brute Force 방식으로 작성했습니다. 이번에는 같은 문제를 Divide and Conquer 방식으로 풀어볼 텐데요. 시간 복잡도는 O(nlg_n_)이 되어야 합니다. 이번 sublist_max 함수는 3개의 파라미터를 받습니다. profits: 며칠 동안의 수익이 담겨 있는 리스트 start: 살펴볼 구간의 시작 인덱스 end: 살펴볼 구간의 끝 인덱스 sublist_max는 profits의 start부터 end까지 구간에서 가능한 가장 큰 수익을 리턴합니다. 합병 정렬을 구현할 때 merge_sort 함수를 깔끔하게 작성하기 위해 추가로 merge 함수를 작성했던 것 기억 나시나요? 마찬가지로 퀵 정렬을 구현할 ..
2021.06.06
no image
[C 이론] 14. 문자와 문자열(2)
문자 입출력 라이브러리 함수 Ex1. getchar(), putchar() #include int main(void){ int ch; // 리턴 표준이 정수형임을 주의! int cnt = 0; // EOF 입력은 Ctrl + Z로 가능하다! while((ch = getchar()) != EOF) { putchar(ch); printf(" \n", cnt++); } return 0; } 💡 키보드 입력은 버퍼에 쌓이고 엔터 입력은 프로그램에 전달된다. (다음 단계 수행) Ex2. _getch(), _putch() #include #include // _getch(), _putch()가 포함된 헤더 int main(void){ int ch; // 리턴 표준이 정수형임을 주의! int cnt = 0; whil..
2021.06.05
no image
[C 이론] 13. 문자와 문자열(1)
아스키코드표(출처 : 코딩도장) 문자열(string) : 문자들이 여러 개 모인 것 문자는 ' (작은 따옴표)로 표현 문자열은 " (큰 따옴표)로 표현 문자열 변수 : 변경 가능한 문자열을 저장할 수 있는 변수 💡 NULL문자( '\0' ) : 문자열의 끝을 나타낸다. - 문자열은 어디서 종료되는지 알 수 없으므로 표시해준다. Ex1. 문자열 출력(1) #include int main(void) { int i = 0; char str[4]; str[0] = 'A'; str[1] = 'B'; str[2] = 'C'; str[3] = '\0'; while(str[i] != 0){ printf("%c %d %s\n", str[i], str[i], str); i++; } return 0; } 🌟 문자열을 생성할..
2021.06.05
no image
[Java] 14. 스윙
스윙 GUI 프로그램 만들기 스윙 프레임 작성 main() 메소드 작성 프레임에 스윙 컴포넌트 붙이기 스윙 패키지 사용에 필요한 import 문 import java.awt .*; // 그래픽 처리를 위한 클래스들의 경로명 import java.awt.event .*; // AWT 이벤트 사용을 위한 경로명 import javax.swing .*; // 스윙 컴포넌트 클래스들의 경로명 import javax.swing.event .*; // 스윙 이벤트를 위한 경로명 Ex1. 300 X 300 크기의 스윙 프레임 만들기 import javax.swing.*; public class MyFrame extends JFrame { public MyFrame() { setTitle("300x300 스윙 프레임 ..
2021.06.05
no image
[알고리즘 일기] 36. 중복되는 항목 찾기
중복되는 항목 찾기 (N + 1)의 크기인 리스트에, 1부터 N까지의 임의의 자연수가 요소로 할당되어 있습니다. 그렇다면 어떤 수는 꼭 한 번은 반복되겠지요. 예를 들어 [1, 3, 4, 2, 5, 4]와 같은 리스트 있을 수도 있고, [1, 1, 1, 6, 2, 2, 3]과 같은 리스트가 있을 수도 있습니다. (몇 개의 수가 여러 번 중복되어 있을 수도 있습니다.) 이런 리스트에서 반복되는 요소를 찾아내려고 합니다. 중복되는 어떠한 수 ‘하나’만 찾아내도 됩니다. 즉 [1, 1, 1, 6, 2, 2, 3] 예시에서 1, 2를 모두 리턴하지 않고, 1 또는 2 하나만 리턴하게 하면 됩니다. 중복되는 수를 찾는 시간 효율적인 함수를 설계해보세요. ❧ 테스트 셋 def find_same_number(some..
2021.06.05