알고리즘/인프런_자바코테강의
인프런 8. 등수구하기(Java)
Solution 1. 일단 배열을 생성한다. 모든 값이 0이다. 2. 2중 for문을 작성하고 바깥쪽 for문의 인덱스의 배열에 1을 할당한다. 3. 안쪽 for문에서 i 번째 배열보다 큰 값이 나오면 등수의 숫자는 커지므로 i번째 배열의 값을 증가시킨다. 아래 설명이 더 분명하다. 순위 알고리즘 * 주어진 범위 데이터의 순위를 구하는 알고리즘인데, * * 순위를 보관할 배열을 추가로 하나 만들어서 해당 배열에 값별 순위를 넣어줘야 한다. * * 이후 for문을 돌리면서 해당 값의 순위를 1로 시작하고 * for문 안에서 for문을 한 번 더 돌리면서 배열의 i값과 다른 값(j)들을 비교하는데 * 배열의 i값보다 큰 값이 있으면 i값보다 큰 값이 있으면 i값에 해당하는 순위 배열의 i값을 1씩 올려준다...
인프런 7. 점수계산 (Java)
Solution 1. 배열에 1이 나오면 답을 맞춘 경우로 그때 cnt를 증가시키고 바로 총 점수에 더해준다. 그리고 다음에도 cnt가 나오면 cnt가 또 증가하여 2가 되며 이를 더하면 연속으로 답을 맞추는데에 대한 합을 구할 수 있다. 2. 배열에서 0이 나오면 cnt를 0으로 초기화해준다. public class Main { public int solution(int[] a) { int answer = 0, cnt = 0; for (int i = 0; i < a.length; i++) { if (a[i]== 1) { cnt++; answer+=cnt; } else cnt = 0; } return answer; } public static void main(String[] args) { Main T ..
인프런 6. 뒤집은 소수 (Java)
Solution 1 (내 풀이) 단순히 문자 뒤집고 정수 변환 후에 소수 판단 메서드로 확인하였다. 소수판단메서드에서는 정수의 제곱근까지만 나뉘어지는지를 시도하여 횟수를 줄일 수 있다. private void solution(int n, String[] s) { StringBuilder sb = new StringBuilder(); for (String x : s) { StringBuilder temp = new StringBuilder(x); String reversed = temp.reverse().toString(); int reversedInt = Integer.parseInt(reversed); if (isPrimeNumber(reversedInt)) sb.append(reversedInt).a..
인프런 5.소수(에라토스테네스 체)_Java
Solution 1 미리 배열을 만들고 인덱스를 값으로 넣어준다. 배수이면 0을 할당하는 방법으로 0이 아니면 소수라고 할 수 있다. private int solution(int n) { // 배열의 인덱스에 맞게 값으로 넣어준다. int[] a = new int[n+1]; for (int i = 2; i
인프런 4. 피보나치 수열(Java)
Solution 1 피보나치 수열을 dp로 푸는 건 자주 나오기 때문에 아무래도 찾아서 다시 적어 봤다. private int[] solution(int n) { StringBuilder sb = new StringBuilder(); int[] arr = new int[n]; arr[0] = 1; arr[1] = 1; for (int i = 2; i < n; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } return arr; } Solution 2 (강사님 풀이) 간단하게 前항과 前前항을 더해서 c를 만들어주고, 前항 변수에 c를 담고 前前항 변수에 b를 담고 반복한다. private void solution(int n) { int a = 1, b =1, c; System...
인프런 3. 가위 바위 보 (Java)
Solution1 (내 풀이) 값의 차이로 A, B, D를 구분한다. private void solution(int n, int[] a, int[] b) { StringBuilder sb = new StringBuilder(); // 두 값의 차이를 이용하여 구함. for (int i = 0; i < n; i++) { int num = a[i] - b[i]; if (num == 1 || num == -2){ sb.append("A\n"); } else if (num == 2 || num == -1) { sb.append("B\n"); } else if (num == 0) { sb.append("D\n"); } } System.out.println(sb); } Solution2 (강사님 풀이) 비기거나 A..
인프런 2. 보이는 학생 (Java)
Solution 앞의 학생보다 키가 커야 보인다고 할 수 있다. 1. 첫 번째 학생은 무조건 보이므로 cnt에 1을 할당하고 일단 배열의 가장 앞에 값을 max에 담아 두고 for문을 돌려서 배열에서 arr보다 큰 값이 나오면 cnt를 증가시키고, max 값을 바꿔준다. public void solution(int[] arr) { int cnt=1; int max = arr[0]; for (int i = 1; i max) { cnt++; max = arr[i]; } } System.out.println(cnt); }
인프런 13. 큰 수 출력하기 (Java)
내 풀이 import java.util.Scanner; public class Main { public void solution(int[] arr) { StringBuilder sb = new StringBuilder(); sb.append(arr[0]).append(" "); for (int i = 0; i < arr.length- 1; i++) { if (arr[i] < arr[i+1]) { sb.append(arr[i+1]).append(" "); } } System.out.println(sb); } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.ne..
인프런 12. 암호(JAVA)
풀이 어려워 보이고 하다가 잘 안되어서 풀이 봤는데 너무 쉽게 풀어서 황당함. substring으로 7개 끊고, replace로만 # -> 1로 * -> 0으로 바꾸고 Integer.parseInt로 2진수 10진수로 변환하고 그 아스키 문자를 char로 형변환하여 answer에 붙여준다. 마지막으로 substring으로 끊어서 7개 이후의 문자로 다시 for문을 돈다. import java.util.Scanner; public class Main { private String solution(int n, String s) { String answer = ""; for (int i = 0; i < n; i++) { String tmp = s.substring(0, 7).replace('#', '1').r..
인프런 11. 문자열 압축(JAVA)
내 풀이 걍 근본없이 막 풀고 틀리면 보완하는 식으로 풀었음. 특히 마지막 문자 때문에 if문을 추가해주었다. public class Main { public void solution(String s) { StringBuilder sb = new StringBuilder(); int count = 1; for (int i = 1; i < s.length(); i++) { if (s.charAt(i-1) != s.charAt(i)) { sb.append(s.charAt(i - 1)); if (count != 1) sb.append(count); count = 1; if (i== s.length()-1) { sb.append(s.charAt(i)); if (count != 1) sb.append(count)..