쉬운 문제였는데 새로운 인덱스를 구할 때 계산을 조금 잘못해서 힌트가 필요했던 문제 문제의 조건 1. 주어진 배열의 원소들을 주어진 횟수만큼 시계 반대방향으로 회전 시키기 vector rotateLeft(int d, vector &arr) { int iSize = arr.size(); vector vecResult(iSize); for (int i = 0; iSize > i; i++) { //새로운 인덱스 위치를 구해서 넣어주는 것이 빠른데 //첫번째 인덱스 자리를 구한 다음 그 다음칸부터 차례대로 넣어준 후 나머지는 앞쪽에 배치하면 된다. //첫번째 인덱스 자리는 arr.size - d니까 (iSize - d + i)를 생각할 수 있다. //그런데 저렇게만 가면 0번째 인덱스에는 값이 안 들어감 -> ..
문제 읽고 뭐 이딴게 다 있나 싶었는데 Discussions 보니까 외국사람들도 똑같더라고요..ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 영어쓰는 사람들도 무슨 소린지 모르겠다고 할 정도였으니 전 더 못 알아먹는 것이 당연했슴 다 풀고나서 보니까 문제가 첨부터 시키는대로 하면 되긴 했습니다. 문제의 조건 0. 가로 길이는 3이고 세로 길이는 쿼리 수 만큼인 2차원 배열이 주어짐 각 배열의 가로줄에는 1 x y or 2 x y 형식으로 integer 데이터가 들어있음 1. 2차원 배열 하나를 주어지는 n 크기만큼 선언한다. 그리고 결과를 저장할 1차원 배열이 하나 더 필요하다. result 란 이름으로 하나 만들자. 2. LastAnswer라는 이름으로 integer 선언. 0으로 초기화한다. 3. 쿼리의 종류는 2가지가 있는데 ..
발상의 전환만 하면 쉽게 풀 수 있는 문제 문제의 조건 1. 2차원 배열이 주어지는데 --- ㅣ --- 처럼 모래시계 모양 위치에 있는 요소들의 합 중 최대값을 구하기 여러 방법이 있겠지만 모래시계의 가운데 한 칸을 중심점으로 잡고 2중 반복문을 돌리면 쉽게 구할 수 있습니다. 배열의 크기는 6x6으로 고정이라 타임아웃 걱정은 안 해도 됩니다. int hourglassSum(vector arr) { //배열 요소의 값 범위가 -9 ~ 9 까지라 최소값이 음수도 나올 수 있다. //7개의 합을 구해야 하기 때문에 -9*7=-63 int iHourGlassSum = -63; for (int i = 1; arr.size() - 1 > i; i++) { for (int j = 1; arr[i].size() - ..
최대값 찾기만 잘 이용하면 쉽게 풀 수 있는 문제인데 그걸 찾기가 쉽지 않았던 문제의 조건 1. 밥과 앤디가 게임을 하는데 2. 정렬되지 않은 배열에서 최대값을 찾으면 최대값을 포함한 나머지 인덱스들을 지움 3. 남은 인덱스에서 또 최대값을 찾아서 2번 반복 4. 밥이 항상 첫번째로 시작하고 게임은 밥과 앤디의 턴이 번갈아가며 진행된다. 5. 마지막으로 최대값을 찾아서 더 이상 진행할 수 없는 상태로 만든 사람이 이긴다. 7. 배열 arr가 주어질 때 BOB과 ANDY 중 누가 이기는지 출력해라 정렬되어있지 않은 배열을 처음부터 순회하면서 최대값을 찾을 때마다 카운트를 증가시켜주면 됩니다. 처음엔 문제에 속아서 반복문으로 최대값 찾은 후에 또 반복문을 최대값 인덱스부터 돌려서 이후 값들을 0으로 바꾸고 ..
Counting sort를 몰라서 어려웠던 문제... 시작 전에 https://bowbowbow.tistory.com/8 Counting Sort : 계수 정렬 Counting Sort Counting Sort Counting Sort 소개 정렬 과정 애니메이션 예시 구현 정리 끝 소개 Counting Sort 는 정렬 알고리즘으로 의 시간복잡도를 갖습니다. 반면 일반적 상황에서 가장 빠른 정렬 알고리즘. bowbowbow.tistory.com 이 블로그 글을 참조하시면 좋습니다. 문제의 조건 1. 은행에서 기준이 되는 추적 범위 날짜(trailing days)들의 중위값을 선정해서 추적 범위 날짜 이후에 쓴 돈이 (중위값 * 2)보다 크거나 같으면 알림을 보낸다. 2. 주어진 배열의 길이만큼의 날짜가 ..
해커랭크 알고리즘 문제 풀면서 처음으로 만난 Advanced 문제...! 휴 정말 이름만큼 쉽지 않았습니다 ㅠ 문제의 조건 1. 배열을 오름차순으로 삽입정렬할 때 완전히 완료될 때까지 원소들이 몇 칸 움직이는지 구하기 저도 처음에 shift의 뜻을 정확하게 몰라서 몇 번 움직이는지로 생각하고 풀려 했는데 당췌 풀리질 않아서 구글링을 해 본 결과... 원소가 원래 있던 칸에서 정렬되는 칸까지의 이동거리를 구하는 것이란 것을 알게 되었습니다. 비트 연산자의 쉬프트 연산자를 생각하면 되나 봅니다... 그러면 처음에 단순하게 생각할 땐 2중 for문으로 하는 삽입정렬을 시도해서 swap이 있을 때마다 shift count를 증가시키는 방법이 있습니다. 하지만 2중 for문은 느리기 때문에 (O(n^2)) 배열이..
이번 문제는 완전 이지이지~~~ 문제의 조건 1. 정렬되지 않은 int 배열이 주어진다. (배열의 길이는 항상 홀수) 2. 여기서 중간값을 구해라. 네 이건 오름차순으로 정렬하고나서 가운데 인덱스의 원소 값을 추출하면 됩니다. 간단하쥬? #include int findMedian(vector arr) { //오름차순 정렬 후 시작 sort(arr.begin(), arr.end()); //배열의 길이는 항상 홀수니까 반으로 나눈 값의 몫만 구하면 됩니다. //여기서 왜 0.5 곱하기를 하냐고 물으신다면... //곱하기 연산이 나누기 연산보다 빠르거든요... int iMiddleVal = arr[arr.size() * 0.5f]; return iMiddleVal; } 아주 Easy
이것 또한 쉬운 문제였는데 문제 조건 까먹고 중복제거하다가 조금 시간을 소비했던 문제입니다. Discussions에서 중복제거 하지말라는 말 보고 정신 차림 ㅎ; 문제의 조건 1. 배열의 원소들을 오름차순 정렬한다. 2. 큰 원소에서 작은 원소를 뺐을 때의 차 중 가장 작은 값을 가지는 짝꿍([i, i+n])을 구한다. 3. 주어지는 배열의 모든 원소는 unique하다. (유일한 값만 들어있음) 4. 하지만 결과값은 최소값이 나오는 모든 수의 짝꿍들이 포함되어야 하기 때문에 중복되는 값들이 나올 수 있다. 배열의 원소 내 두 수의 차 중 가장 작은 값이 나오는 짝꿍을 구하면 되니까 모든 수를 계산할 필요는 없습니다. 그리고 1번 조건으로 오름차순 정렬을 하고나면 숫자가 작은 순서부터 큰 순서대로 차례차례..
- Total
- Today
- Yesterday
- 다이나믹프로그래밍
- greedy
- 깊이우선탐색
- 하드웨어
- 해커랭크
- 너비우선탐색
- 캐나다
- 프로그래머스
- 스위프트플레이그라운드
- 그리디
- 컴퓨터공부
- hackerrank
- 알고리즘
- 문제풀이
- DFS
- 아이패드
- 컴퓨터
- dp
- c언어
- 컴퓨터사이언스
- C언어기초
- 기초
- 캐나다생활
- 애플
- 코딩공부
- c++
- 프로그래밍
- BFS
- 영어공부
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |