728x90 반응형 Java145 JAVA Doit 알고리즘 코딩테스트 자바 편 - Day6 04 정렬 04-3 삽입 정렬 04-4 퀵 정렬 2023. 5. 27. JAVA 프로그래머스 [배열 뒤집기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 배열 뒤집기https://school.programmers.co.kr/learn/courses/30/lessons/120821 해결 과정 먼저 num_list 배열의 크기만큼 answer 배열을 생성한다. 반복문을 돌면서 num_list의 값들을 answer의 반대되는 순서로 넣어준다. answer배열을 return 해준다. 소스 코드 class Solution { public int[] solution(int[] num_list) { int[] answer = new int[num_list.length]; for (int i = 0; i 2023. 5. 26. JAVA 프로그래머스 [나이 출력] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 나이 출력 https://school.programmers.co.kr/learn/courses/30/lessons/120820 해결 과정 먼저 2000년을 기준으로 생각하기 위해 age에서 2022년도의 22를 빼준후 1을 빼준다. 태어난 년도 계산을 위해 이 값을 2000에서 빼주면 된다. 소스 코드 class Solution { public int solution(int age) { int answer = 0; answer = 2000-(age-22-1); return answer; } } 2023. 5. 26. JAVA 프로그래머스 [아이스 아메리카노] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 아이스 아메리카노 https://school.programmers.co.kr/learn/courses/30/lessons/120819 해결 과정 아이스 아메리카노 잔수를 k로 하고, 반복문에서 money를 5500으로 나누었을 때 몫이 0이라면 더이상 살수 없는 경우를 나타내므로 break; 를 이용하여 반복문을 빠져나온다. 반복문을 돌며 money에서 5500을 뺄 때마다 i를 +1해주고 이것을 k(잔수)로 대입해준다. 배열은 k, money로 이루어져 있으므로, 다 구해진 후 answer 배열을 선언하고 초기화해주면 된다. 소스 코드 class Solution { public int[] solution(int money) { int k = 0.. 2023. 5. 26. JAVA Doit 알고리즘 코딩테스트 자바 편 - Day5 04 정렬 04-1 버블 정렬 문제 015 수 정렬하기 1 백준 2750번 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 01단계 1. 문자열 형태로 입력값을 받음 2. 문자 배열로 변환 3. 문자 배열값을 순서대로 읽으면서 숫자형으로 변환하여 더함 * 문자열을 숫자형으로 변경하려면? - 아스키코드에서 같은 의미의 문자와 숫자의 드 값 차이는 48이다. - ex) 문자'1'을 숫자 1로 변환하려면 '1'-48 또는 '1'-'0' 으로연산 02단계 0.. 2023. 5. 26. JAVA 프로그래머스 [옷가게 할인 받기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 옷가게 할인 받기 https://school.programmers.co.kr/learn/courses/30/lessons/120818 해결 과정 if문은 위에서 부터 순차적으로 진행되기 때문에 제일 큰 값부터 진행해준다 단순히 그 조건에 해당하면 기존 price값에 할인율을 적용한 값이 나오도록 곱해진 것을 다시 넣어주고 마지막에 return 해주면 된다. 하지만 아래 두 코드를 보자. 처음에 자꾸 런타임 에러가 발생했다. 다른 사람의 코드를 참고해보니 통과가 나왔다. 여기서 두개의 차이는 *=로 표현하고 안하고 차이인데 왜 결과는 이럴까? 다음 포스트들에서 해답을 찾았다 오호,, https://cinnamonc.tistory.com/m/208 .. 2023. 5. 26. JAVA 프로그래머스 [피자 나눠 먹기(3)] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 피자 나눠 먹기(3) https://school.programmers.co.kr/learn/courses/30/lessons/120816 해결 과정 피자 조각 수 : slice 피자를 먹는 사람의 수 : n n명의 사람이 적어도 한 조각씩 먹어야 하므로, 두 가지로 나누어 생각할 수 있다 n을 slice로 나누었을 때 나머지가 0이 아니라면, 피자는 몫 보다 +1을 해야한다. n % slice != 0 일때 피자 개수는 n/slice + 1 소스 코드 class Solution { public int solution(int slice, int n) { int answer = 0; if (n % slice != 0) answer = n / slic.. 2023. 5. 25. JAVA 프로그래머스 [피자 나눠 먹기(2)] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 피자 나눠 먹기(2) https://school.programmers.co.kr/learn/courses/30/lessons/120815 해결 과정 피자 한 판은 6조각, 한사람이 먹는 피자의 개수를 i라고 하고 사람수는 n이므로, 6와 n의 최대공약수를 구한다. (gcd) 사람 수 n를 최대공약수인 gcd로 나눠주면 피자가 몇 판이어야하는지 알 수 있다. 소스 코드 class Solution { public int solution(int n) { int answer = 0; int gcd = 0; for(int i =1; i 2023. 5. 25. JAVA 프로그래머스 [피자 나눠 먹기(1)] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 피자 나눠 먹기(1) https://school.programmers.co.kr/learn/courses/30/lessons/120814 해결 과정 규칙에 따라서 알아보기 위해 몇가지 예시를 사용해보겠다 1명일 경우 -> 1개 2명일 경우 -> 1개 6명일 경우 -> 1개 7명일 경우 -> 1개, 14명일 경우 -> 2개 21명일 경우 -> 3개 이렇게 7의 배수가 될때마다 피자의 갯수가 하나씩 올라가는 것을 규칙으로 하여 반복문에서 7의 배수가 될때마다 1씩 증가하도록 하면 된다. 여기서 주의해야 할 점은 반복문에서 i0) 필요한 피자의 개수는 n/7 + 1개가 된다. 2023. 5. 25. JAVA 프로그래머스 [배열의 평균값] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 배열의 평균값 https://school.programmers.co.kr/learn/courses/30/lessons/120817 해결 과정 배열 원소들의 평균을 구하려면, 배열 모든 원소의 합을 구한 뒤, 배열의 길이로 나눠주면 된다. 배열의 길이는 numbers. length로 사용한다. 소스 코드 class Solution { public double solution(int[] numbers) { double answer = 0; for (int i = 0; i< numbers.length; i++) { answer += numbers[i]; } answer = answer/numbers.length; return answer; } } 2023. 5. 25. JAVA Doit 알고리즘 코딩테스트 자바 편 - Day4 03 자료구조 03-5 스택과 큐 스택(Stack) - 삽입과 삭제 연산이 후입선출(LIFO) 로 이뤄지는 자료구조 스택 용어 1. 위치 - top : 삽입과 삭제가 일어나는 위치 2. 연산 - push : top 위치에 새로운 데이터를 삽입하는 연산 - pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산 - peek : top 위치에 현재 있는 데이터를 단순 확인하는 연산 깊이 우선 탐색, 백트래킹 종류의 코딩 테스트에 효과적 큐(Queue) - 삽입과 삭제 연산이 선입선출(FIFO)로 이뤄지는 자료구조 큐 용어 1. rear : 큐에서 가장 끝 데이터를 가리키는 영역 2. front : 큐에서 가장 앞의 데이터를 가리키는 영역 3. add : reat 부분에 새로운 데이터를 삽입하는 .. 2023. 5. 25. JAVA 프로그래머스 [나머지 구하기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 나머지 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/120810 해결 과정 (생략) 소스 코드 class Solution { public int solution(int num1, int num2) { int answer = -1; answer = num1 % num2; return answer; } } 2023. 5. 24. JAVA 프로그래머스 [최빈값 구하기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 최빈값 구하기https://school.programmers.co.kr/learn/courses/30/lessons/120812 해결 과정 이 문제,,, 좀 어려웠다....ㅜ 우선, 빈도수를 구하기 위해 array 배열의 원소를 count 배열에 해당하는 인덱스에 넣는 것을 이용한다. 먼저 array 배열에서 가장 큰 값을 구한 후 거기에 1을 더해주면 count 배열의 크기를 설정할 수 있다. (배열에서 가장 큰 값이 5라고 하면, count배열의 크기는 5+1=6 으로 지정할 수 있다. 이유는 인덱스는 0부터 시작하기 때문. array 배열 에 원소 3이 있다면 이에 해당하는 count 배열의 인덱스는 count[4]) array 배열에서 가.. 2023. 5. 24. JAVA Doit 알고리즘 코딩테스트 자바 편 - Day3 03 자료구조 03-3 투 포인터 문제 006 연속된 자연수의 합 구하기 백준 2018번 https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net 01단계 1. 문자열 형태로 입력값을 받음 2. 문자 배열로 변환 3. 문자 배열값을 순서대로 읽으면서 숫자형으로 변환하여 더함 * 문자열을 숫자형으로 변경하려면? - 아스키코드에서 같은 의미의 문자와 숫자의 드 값 차이는 48이다. - ex) 문자'1'을 숫자 1로 변환하려면 '1'-4.. 2023. 5. 24. JAVA 프로그래머스 [중앙값 구하기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 중앙값 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/120811 해결 과정 배열의 길이가 홀수라는 조건이 있으므로 짝수는 고려하지 않는다. 우선 배열을 Arrays.sort(array); 로 정렬해주고, 배열의 중앙값을 찾아야하기 때문에 해당 인덱스를 배열의 길이/2 로 나타낼 수 있다; answer = array[array.length/2]; 소스코드 import java.util.Arrays; class Solution { public int solution(int[] array) { int answer = 0; Arrays.sort(array); answer = array[a.. 2023. 5. 24. JAVA 프로그래머스 [짝수는 싫어요] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 짝수는 싫어요 https://school.programmers.co.kr/learn/courses/30/lessons/120813 해결 과정 if (n % 2 == 0) { int[] arr = new int[n/2]; } else { int[] arr = new int[n/2+1]; } 이렇게 하면 런타임 오류가 발생한다. 하지만 다음과 같이 실행하면 오류가 발생하지 않는다 int[] arr; if (n % 2 == 0) { arr = new int[n/2]; } else { arr = new int[n/2+1]; } 이유는 무엇일까? 암튼 그렇게 배열 arr의 길이를 정해준 후, 인덱스를 위해 int k = 0 초기화해주고 반복문을 돌면서 홀.. 2023. 5. 24. JAVA 프로그래머스 [숫자 비교하기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 숫자 비교하기 https://school.programmers.co.kr/learn/courses/30/lessons/120807 해결 과정 단순히 두 매개변수가 같으면 1을 return 하고 다르면 -1을 return하면 되기 때문에 조건문을 사용하면, num1 == num2 일 경우 return 1; 아닐 경우 return -1; 이 풀이를 토대로 간단하게 해결 할 수 있다. 소스 코드 class Solution { public int solution(int num1, int num2) { int answer = 0; if (num1 == num2) { return 1; } else { return -1; } } } 2023. 5. 23. JAVA 프로그래머스 [배열 두 배 만들기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 배열 두 배 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/120809 해결 과정 해결 방법은 간단하다. 먼저 return을 위한 배열을 생성한다. (int [ ] answer) 배열의 크기는 numbers의 배열의 크기와 똑같이 생성하면 되기 때문에, numbers.length를 우선 크기만 할당해준다. 그 다음 반복문을 사용하여 number의 원소를 하나씩 짚어가며, 그 원소의 두배 값을 answer 배열에 넣어주면 된다. answer[i] = 2*numbers[i]; 반복문을 배열의 크기만큼 돌고 나면 answer도 모두 원소가 생기게 된다 마지막엔 return answer;로.. 2023. 5. 23. JAVA Doit 알고리즘 코딩테스트 자바 편 - Day2 03 자료구조 03-1 배열과 리스트 배열 : 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조 배열의 특징 1. 인덱스를 사용하여 값에 바로 접근할 수 있다. 2. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다 3. 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다. 4. 구조가 간단하므로 코딩 테스트에서 많이 사용한다. 리스트 : 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 리스트의 특징 1. 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야 한다. 다시 말해 값에 접근하는 속도가 느리다. 2. 포인터로 연결되어 있으.. 2023. 5. 23. 이전 1 ··· 4 5 6 7 8 다음 728x90 반응형