일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- baekjoon #boj #c++
- VS #비주얼스튜디오
- unity #2d-game
- baekjoon #백준 #boj
- flutter #상태관리
- 백준 #c++
- 비주얼 스튜디오 #vs #visual studio
- firebase #파이어베이스
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- boj #baekjoon #c++
- flutter #git
- flutter #firebase #플러터 #파이어베이스 #연동
- flutter #플러터
- flutter #app #취준
- flutter #플러터 #분석
- git #unity #깃허브
- 비주얼스튜디오 #코드스니펫
- flutter #깃
- flutter #todolist
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- unity #2d-game #minigame #vscode
- boj #c++
- Flutter
- 백준 #boj #baekjoon
- 로컬저장소 #이름변경
- 백준
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- 플러터 #flutter #restful #rest api
- 백준 #boj
- boj #baekjoon
- Today
- Total
목록전체 글 (150)
cococo-coding
책을 읽고 공부한 내용을 정리하기 위한 글입니다. 1.1 자료구조와 알고리즘 자료구조란? 프로그램에서 자료들을 정리하여 보관하는 구조를 자료구조(data structure)라고 부른다. 프로그램=자료구조+알고리즘 자료구조(data structure): 자료를 저장하는 구조 알고리즘(algorithm): 주어진 문제를 처리하는 절차 ex)시험성적을 읽어 들여서 최고성적을 구하는 프로그램에서 자료구조: 배열로 선택 알고리즘: 변수를 하나 만들고 배열의 첫 번째 요소값을 저장-> 변수와 배열의 요소들을 순차적으로 비교-> 만약 배열요소가 더 크다면 배열요소의 값을 변수에 저장 자료구조가 결정되면 그 자료구조에서 사용할 수 있는 알고리즘이 결정된다. 알고리즘이란? 알고리즘(algorithm) 1. 컴퓨터로 문제..
문제 분석 캥거루의 위치 a,b,c를 입력받고 양 끝의 캥거루만을 움직이면서 사이를 좁혀나가는 문제이다. 이때 a와 b사이의 위치, b와 c사이의 위치를 비교하여 더 긴 쪽으로 캥거루를 옮겨야 움직이는 횟수를 최대로 늘릴 수 있다. 알고리즘 설계 움직이는 횟수를 구하는 것이 목표이므로 a와 b, b와 c사이의 더 긴 거리를 구하면 끝이다. 그 거리내에서만 캥거루들을 움직일 수 있기 때문에 -1을 해준 값을 출력한다. ex) a:3 b:5 c:9 a나 c캥거루가 캥거루 사이 좌표로 움직여야하므로, a가 b와 c사이로 뛰어간다. 이때 최대횟수로 만들어야하므로 a는 8로 움직인다. 이후로는 c가 다시 7로 움직이고, 다시 a가 6으로 움직이고 ... 이런 식으로 반복이 되므로 결국은 처음에 주어진 좌표에서 긴..
문제 분석 마을의 수가 주어지고, 한쪽으로만 마을을 쭉 도는 방법으로 모든 마을들을 가야한다. 이때 최소한의 이동비용을 갖는 비용을 구하려면, 가장 이동비용이 높은 이동거리 하나만을 제외하면 된다. 알고리즘 설계 벡터와 알고리즘 헤더의 sort()함수를 이용해서 구현했다. 벡터로 이동비용을 입력받아 넣고, sort함수로 오름차순으로 벡터를 정리한 후에 마지막 요소(가장 긴 이동비용)을 제외한 나머지를 다 더해주어 출력했다. 시간 복잡도 벡터에 이동비용 입력받기 - n sum구하기 - n -> 대략 n+n = 2n 이므로 O(n) 코드 #include #include #include using namespace std; /* 1.마을수를 입력받음 2.이동비용을 입력받는다 3.최소 이동비용을 구한다 4.최소..
문제 분석 봉우리 겸 활잡이 수를 입력받는다. 각 봉우리 높이는 모두 다르고, 오른쪽으로만 이동하는 상황에서 가장 많은 적을 처치할 수 있는 숫자를 구한다. (문제가 이해가 잘 안 갔는데 '힌트'를 보니 금방 이해가 되었다.) 알고리즘 설계 이중포문을 이용한다. 만약 4개의 봉우리를 입력받고, 각 봉우리가 1번, 2번, 3번, 4번이라고 한다면 i - j 1번 - 2,3,4번 2번 - 3,4번 3번 - 4번 이렇게 비교하도록 한다. 시간 복잡도 봉우리 높이 입력받기 - n 이중 포문 - (n-1)*{(n-1)+(n-2)+(n-3)....} -> 대략 O(n2) 코드 #include #include #include using namespace std; /* 1. 봉우리 겸 활잡이 수를 입력받는다. 2. 봉..
문제 분석 좌석배치에 따라 컵홀더 개수가 달라지며, 컵홀더를 사용할 수 있는 사람 수를 구하는 문제이다. S는 일반 좌석, L은 커플석이며 L은 항상 쌍으로 두 좌석이 붙어있다. 양 끝좌석에는 컵홀더가 무조건 존재한다. 이러한 특징에 따라 코드를 구성했다. 알고리즘 설계 우선 string형으로 좌석을 입력받았다. 그리고 for문으로 좌석중에 'S'가 있다면 일반좌석 수(cnts)를 카운팅, 아니라면 커플석이므로 커플석 수(cntl)를 카운팅했다. 이때 커플석은 무조건 두 좌석이 붙어있으므로, 커플석좌석을 다 구한 뒤에는 2로 나누어줘야 한다. 컵홀더의 총 개수를 구해보자. 우선 일반좌석 수+커플석좌석 수를 더한 총 좌석수에서 1을 빼준 개수에 좌석 양쪽 끝에 무조건 2개를 더해주면 구할 수 있다. int..
문제 분석 두 정수 a,b를 받아서 5와 6 숫자들을 변경하여 두 수의 최댓값을 구하는 문제이다. 모든 수가 6일때의 합이 최댓값이 되고, 모든 수가 5일때의 합이 최솟값이 된다. 알고리즘 설계 a와 b를 string으로 받는다. 5와 6을 치환해야하는 부분이 있기 때문! 만약 각 인자의 '5'가 있으면 '6'으로 치환해서 max값을 구해준다. 이때 stoi함수로 a와b를 각각 int형으로 변경해준뒤에 max를 구해준다. min도 동일하게 구해준다. stoi함수는 괄호안에 바꿀 string을 넣어줘야한다. int max = stoi(a) + stoi(b); 코드 #include #include using namespace std; /* 1. 정수 a,b를 받는다. 2. 정수 중 5와 6을 찾는다. 3. ..
문제 분석 우선 그리디 알고리즘의 문제이다. 문제를 보면 '버튼 A,B,C를 누른 횟수의 합은 항상 최소가 되어야 한다. ~ 10번은 최소 횟수가 아니기 때문에 답이 될 수 없다'라는 문구를 보면 그리디임을 알 수 있다. 그리고 맞춰야 할 조건들이 몇 개 있다. 1. T초를 맞추지 못하면 음수-1을 출력한다. 2. 버튼 조작 횟수를 출력할 때 해당 버튼을 누르지 않는 경우는 0을 출력한다. 이 부분만 주의하면 무난하게 풀 수 있는 문제였다. 알고리즘 설계 우선은 요리시간을 초단위로 변환해서 (300초, 60초, 10초) 벡터로 만들어준다. 그리고 버튼클릭횟수도 총합이 아니라 각 버튼별 횟수로 출력해야하므로 벡터(나 배열)로 만들어준다. 기본적으로 벡터의 개수만 넣어서 만들어주면 자동으로 0으로 초기화된다..
그리디 알고리즘의 첫 문제를 풀어봤다. 문제 분석 그리디 알고리즘의 문제이다. 타로가 지불한 돈을 입력받아 1000엔에서 뺀 값(change)을 잔돈으로 치환하는 문제이다. 문제를 보면 '언제나 거스름돈 개수가 가장 적게 잔돈을 준다'라는 구문이 있다. 보통 그리디 알고리즘은 '가장 적게'나 '가장 많게' 이런 식으로 많이 나온다고 하던데 문제를 잘 살펴보면 쉽게 찾을 수 있다. 알고리즘 설계 잔돈(500, 100, 50, 10, 5, 1)들을 배열이나 벡터에 담아서 쭈루룩 훑는 방식이 편하다. 큰 순으로 담아야 잔돈 개수가 적어지므로, 500부터 벡터에 담았다. change를 잔돈으로 나눈 몫-> 동전 개수 change를 잔돈으로 나눈 나머지-> 새로운 change 이 구문을 반복한다. 아래는 예제를 ..