실버3 달팽이 구현
·
알고리즘/Array(1, 2차원 배열)
1. 문제 2. 나의 풀이이런 문제를 풀기 위해서는 규칙성을 찾는 게 중요하다고 생각했다.상하좌우 이동을 개별적 메서드로 만들었을 때, Up과 Right, Down과 Left의 시행 횟수가 같다는 걸 알았다.또한 시행 횟수가 Up,Right -> Down,Left -> Up, Right -> .... 로 흘러갈 때 마다 시행 횟수가 1씩 증가한다. 즉, Up, Right 한 번 씩 -> Down, Left 두 번씩 -> Up, Right 세 번씩 -> ... 이걸 구현하면 끝이당 3. 나의 코드import java.util.Scanner;public class Main { public static StringBuilder sb; public static int[][] arr; publi..
12. 멘토링
·
알고리즘/Array(1, 2차원 배열)
1. 문제 첫줄에 n(학생 수), m (시험 수 입력) m * n 행렬로 시험 결과를 입력 받음 0번 인덱스가 1등, 1번 인덱스가 2등 .....으로 순위가 매겨짐 헷갈리지말자. 4 3 //3번 > 4번 > 1번 > 2번 학생 순으로 순위가 매겨졌다는 뜻. 3 4 1 2 4 3 2 1 3 1 4 2 2 - 1. 나의 풀이 1. 학생의 관계를 표현한 N * N 행렬을 만들어서 기본으로 1의 값이 들어간다. 2. n번 학생의 인덱스를 구하는 findindexof 메서드를 만들었다. 3. findindexof 메서드를 통해 인덱스를 비교해 조건에 맞으면 N * N 행렬의 값을 0으로 변경한다. 예시로 첫번째 시험에서 1번 학생과 3번 학생의 인덱스를 비교할 때 첫 번째 시험에서 1번 학생은 3번학생보다 시험..
11. 임시반장 정하기
·
알고리즘/Array(1, 2차원 배열)
1. 문제 1학년 ~ 5학년 까지 가장 많은 학생들과 같은 반이 된 학생이 6학년의 반장이 된다! 여기선 4번 학생이 2, 3, 5번 학생과 같은 반이었으므로 4번 학생이 반장이된다. 2 - 1. 나의 풀이 1번 학생이 1학년 때 같은 반인 친구, 2학년때 같은 반인 친구 반복문을 돌려서 count 한다. for문에서 탐색을 한 열로 돌아간다. 그래서 같은 학생과 같은 반인 적이 많을 수 있으므로 HashSet을 이용해서 count했다. HashSet은 중복을 허용하지 않으므로 2번 학생이 여러번 add되어도 Hash의 size를 세면 한 번으로 카운팅됨! 2 - 2. 나의 코드 package Algorythm_Array; import java.util.Arrays; import java.util.Has..
10. 봉우리
·
알고리즘/Array(1, 2차원 배열)
1. 문제 봉우리를 구하는 문제이다. N * N 격자판의 숫자 중, 자신의 상하좌우 보다 큰 숫자를 봉우리 지역이라한다. 격자의 가장 자리는 0으로 초기화 되어있다. 칭하고 봉우리 지역의 개수를 출력하자. 2 - 1. 나의 풀이 이 문제도 쉽지만, 배열을 다루는 만큼 배열 범위를 넘지 않게 조심하자! 1. 가장자리를 0 으로 초기화 하기 위해 int 배열의 크기를 [n+2][n+2]로 초기화한다. 2. 봉우리를 찾는다. i 는 1부터 n +1 번째 인덱스까지! 3. 봉우리를 count 해주면 끝 2 - 2. 나의 코드 package Algorythm_Array; import java.util.Scanner; public class Array10 { public static int solution(int[..
9. 격자판 최대합
·
알고리즘/Array(1, 2차원 배열)
1. 문제 N * N 배열에서 행의 합 ,열의 합, 두 대각선의 합 중에서 가장 큰 값을 출력하시오 2 - 1. 나의 풀이 쉽게 풀었다. 1. 행의 합, 최댓값 갱신 해주기 2. 열의 합, 최댓값 갱신 해주기 3. 두 대각선의 합, 최댓값 갱신 해주기 2 - 2. 나의 코드 import java.util.Scanner; public class Array09 { public static int solution(int[][] intArr, int n) { int max=0; int tmp=0; for (int i = 0; i max) max = tmp;..
8. 등수 구하기
·
알고리즘/Array(1, 2차원 배열)
1. 문제 학생 N명의 점수가 입력되면, 입력된 순서대로 등수를 출력한다. 같은 점수라면 높은 등수로 동일 처리한다. ex(2 2 2 1 5) 2 - 1. 나의 풀이 좀 복잡하게 풀었다. 1. 최대값을 찾는다. 2. 최대값 인덱스를 answer 배열에 rank를 적는다. 3. 같은 점수가 있으면 높은 동일 점수로 처리하기 위해서 동일 점수를 찾는다. 4. answer 배열이 꽉차면 반복문을 일찍 나온다. (rank == n+1) answer[index] = rank를 하고나서 intArr[index] = -1을 해줘야한다.! 2 - 2. 나의 코드 import java.util.Scanner; public class Array08 { public static int[] solution(int[] intA..
7. 점수 계산
·
알고리즘/Array(1, 2차원 배열)
1. 문제 2 - 1. 나의 풀이 1. 점수용 배열 만들기 2. 0번째 인덱스는 채점 0번 인덱스와 같음 3. 점수가 1일 경우. i - 1 번째 점수가 1 이상이면 i 번째 점수는 +1 4. 점수가 0일 경우. 해당 점수 인덱스는 0 5. 점수 인덱스가 결정 될 때(초기화 될 때) answer에 누적합한다. 2 - 2. 나의 코드 import java.util.Arrays; import java.util.Scanner; public class Array07 { public static int solution(int[] intArr, int n) { int tmpArr[] = new int[n]; tmpArr[0] = intArr[0]; //처음은 점수 = 채점. int answer = tmpArr[0]..
6. 뒤집은 소수
·
알고리즘/Array(1, 2차원 배열)
1. 문제 n개 입력 입력된 숫자들을 뒤집고 뒤집은 수가 소수이면 해당 수를 출력한다. 뒤집었을 때 첫 자리의 연속된 0은 무시한다. (ex 910 ㅡ> 019 ㅡ> 19) 2 - 1. 나의 풀이 알바하면서 어떻게 풀어야할까 고민해봄. 1. 입력된 숫자를 뒤집기 2. 뒤집은 수 첫번째가 연속된 0일 경우를 해결 3. 소수인지 판단 위 과정을 거쳐서 출력하면 된다. 1. 입력된 숫자를 뒤집기 입력된 수를 String 타입으로 변환한다음 toCharArray()를 사용해 char[] tmp 에 저장한다. 그다음 tmp를 뒤집어 주는 알고리즘을 사용한다. (swap하면 된다.) 2. 뒤집은 수 첫번째가 연속된 0일 경우 이 경우 019 를 19로 바꿔줘야하는데 어떻게 하지 고민하다가, Integer.parse..
5. 소수(에라토스테네스의 체)
·
알고리즘/Array(1, 2차원 배열)
1. 문제 입력 n 이하의 소수 개수를 구하시오. 2. 나의 풀이 코드는 작성 했으나 시간초과로 오답 판정. 내 머리로는 1부터 자기자신으로 나누는 노가다 반복문 말고는 다른 방법이 안떠올라 강의를 봤다. 3 - 1. 강의 풀이 강의에서는 에라토스테네스의 체에 대해 설명한다. 3 - 2. 강의 코드 package Algorythm_Array; import java.util.Scanner; public class Array05 { public static int solution(int n) { int answer=0; int[] intArr = new int[n + 1]; for (int i = 2; i