728x90 반응형 EVERYTHING196 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. JAVA 프로그래머스 [분수의 덧셈] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 분수의 덧셈 https://school.programmers.co.kr/learn/courses/30/lessons/120808 해결 과정 모두가 알 듯, 분수의 덧셈은 통분을 통해 이루어진다. 두 분수의 분모를 똑같이 맞춘 후 그에 알맞게 분자에 곱해주면 된다. 최소공배수를 고려하지 않고 일단 통분을 해보면 공통 분모는 denom1 * denom2 가 된다. 분자는 각각 numer1*denom2, numer2*denom1 이다. 우리는 이 두 분수를 더할 것이기 때문에 더하게 되면, 분모는 denom1 * denom2이고, 분자는 numer1*denom2 + numer2*denom1 이 된다. 우리는 조건에 따라 기약분수로 나타내야 하기 때문에.. 2023. 5. 23. JAVA 프로그래머스 [두 수의 나눗셈] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 두 수의 나눗셈 https://school.programmers.co.kr/learn/courses/30/lessons/120806 해결 과정 먼저 answer의 자료형을 나눗셈을 고려하여 double로 선언해준다. 보통의 몫을 구한다면 num1/num2의 결과로 소수점이 버려지겠지만, 본 문제에서는 소수점자리까지 모두 표현해야 하므로 (double)을 형변환을 해주고 1000을 곱해준다. answer = (double) num1/num2 * 1000; 이 결과에 정수부분을 출력해야하므로 다시(int)를 붙혀 형변환을 해줌으로써 소수점을 버릴 수 있다. 이 부분을 return에서 한번에 처리하여 출력한다. return (int)answer; 소스.. 2023. 5. 23. JAVA Doit 알고리즘 코딩테스트 자바 편 - Day1 01~02 코딩테스트 준비하기 01 어떤알고리즘으로 풀어야 할까? - 알고리즘 선택의 기준이 되는 시간 복잡도 01-1 시간 복잡도 표기법 알아보기 1. 빅 - 오메가 : 최선일 때의 연산 횟수를 나타낸 표기법 2. 빅 - 세타 : 보통일 때의 연산 횟수를 나타낸 표기법 3. 빅 - 오 : 최악일 때의 연산 횟수를 나타낸 표기법 * 코테에서는 빅-오 표기법을 기준으로 수행 시간을 계산한다 01-2 시간 복잡도 활용하기 시간 초과 시 -> 1. 알맞은 알고리즘인가? -> 2. 비효율적인 로직을 찾아서 효율적으로 바꾸자! 2. 코드의 논리 오류를 어떻게 잡을까? - 가장 뛰어난 오류 탐색 방법, 디버깅 디버깅(Debugging) - 프로그램에서 발생하는 문법 오류나 논리 오류를 찾아 바로잡는 과정 오류1. .. 2023. 5. 22. JAVA 프로그래머스 [두 수의 곱] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 두 수의 곱 https://school.programmers.co.kr/learn/courses/30/lessons/120804 해결 과정 (생략) 소스 코드 class Solution { public int solution(int num1, int num2) { int answer = 0; answer = num1 * num2; return answer; } } 2023. 5. 22. JAVA 프로그래머스 [몫 구하기] 자바 Lv.0 [프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 몫 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/120805 해결 과정 (생략) 소스 코드 class Solution { public int solution(int num1, int num2) { int answer = 0; answer = num1 / num2; return answer; } } 2023. 5. 22. 이전 1 ··· 6 7 8 9 10 11 다음 728x90 반응형