알고리즘 테스트:
1번. 행렬 음양 더하기
행렬이 두개 있습니다. 두 행렬의 절댓값을 차례대로 담은 정수 배열 arr1, arr2와 행렬의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 두 행렬의 부호는 같습니다.
실제 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
import java.util.Arrays;
public class Main {
public int[][] solution(int[][] arr1, int[][] arr2, boolean[][] signs) {
int[][] answer = new int[arr1.length][arr1[0].length];
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[0].length;j++){
answer[i][j] = (signs[i][j])? arr1[i][j]+arr2[i][j] : (arr1[i][j]+arr2[i][j])*-1;
}
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
int[][] arr1 = {{5,7,1},{2,3,5}};
int[][] arr2 = {{5,1,6},{7,5,6}};
boolean[][] signs={{true,true,false},{false,true,false}};
System.out.println(Arrays.deepToString(method.solution(arr1, arr2, signs)));
}
}
2번.자연수 뒤집어 더하기
자연수 n의 각 자리 숫자를 뒤집은 순서로 더해 출력하는 수식을 리턴해주세요. 예를들어 n이 12345이면 "5+4+3+2+1=15" 라는 문자열을 리턴합니다.
public class Main {
public String solution(int n) {
String answer = ""; int sum=0;
String s = Integer.toString(n);
char[] c = s.toCharArray();
for(int i=0;i<c.length;i++){
sum += c[i]-'0';
answer = c[i] + "+" + answer;
}
answer+= "=" + sum;
return answer;
}
public static void main(String[] args) {
Main method = new Main();
System.out.println(method.solution(718253));
}
}
3번.같은 단어는 싫어(이 문제를 제출함)
배열 arr와 정수 n이 주어집니다. 배열 arr의 각 원소는 문자열로 이루어져 있습니다. 이때, 배열 arr에서 중복되는 단어는 전부 제거하려고 합니다. 단, 제거된 후 남은 단어들을 반환할 때는 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 ["brush", "sun", "brush", "bed", "car"]이고 n이 1이면 중복을 제거한 배열인 ["sun", "bed", "car"]에서 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
프로그래머스의 문제에서는 같은 중복단어를 하나만 남기고 제거하는 문제로 기억한다. 그래서 같은 방법으로 set을 통해 중복제거를 하려 하였으나 중복되는 단어를 모두 제거해야 한다는 점을 뒤늦게 발견해 버렸다.
그래서 중복을 찾는 알고리즘을 직접 짜서 중복단어가 없는 단어만 ArrayList에 추가하는 방법을 사용하였다.
그 뒤에는 최대 원소의 갯수가 100개이므로 해당 문자열 배열을 문자 이차원 배열에 넣고 이중for문을 통해 해당 index의 문자를 비교해가며 정렬하였다. 이 과정을 하기 전에 Arrays.sort()를 한번 해줘서 기준 문자가 같은 단어들은 사전순으로 배열되게 하였다.
import java.util.*;
public class Main {
public String[] solution(String[] arr, int n) {
String[] answer = {};
ArrayList<String> list = new ArrayList<String>();
Arrays.sort(arr);
String t = arr[0]; boolean check = true;
for(int i=1;i<arr.length;i++){
if(arr[i].equals(t)) check = false;
else{
if(check) list.add(t);
t = arr[i];
check = true;
}
}
if(check) list.add(t);
answer = new String[list.size()];
for(int i=0;i<list.size();i++) answer[i] = list.get(i);
char[][] c = new char[answer.length][];
for(int i=0;i< answer.length;i++) c[i] = answer[i].toCharArray();
for(int i=0;i<answer.length-1;i++){
for(int j=0;j<answer.length-1;j++){
if(c[j][n] > c[j+1][n]){
char[] temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
String temps = answer[j];
answer[j] = answer[j+1];
answer[j+1] = temps;
}
}
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
String[] arr = {"coke", "water", "glass", "dog", "dog", "yogurt", "vitamin"};
int n = 2;
System.out.println(Arrays.toString(method.solution(arr, n)));
}
}
'TIL' 카테고리의 다른 글
2022.07.23.TIL (0) | 2022.07.23 |
---|---|
2022.07.22.TIL (0) | 2022.07.22 |
2022.07.20.TIL (0) | 2022.07.20 |
2022.07.19.TIL (0) | 2022.07.19 |
2022.07.18.TIL (0) | 2022.07.18 |