1. 같은 숫자는 싫어
https://programmers.co.kr/learn/courses/30/lessons/12906
[기본 상태]
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int[] answer = {};
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
[풀이에 필요한 조건]
입력받은 arr 비교를 위한 clone Array를 생성.
int[] clone = arr.clone();
비교 후 결과값을 임시저장할 int형 가변 리스트 생성.
ArrayList<Integer> integers = new ArrayList<>();
비교를 위한 for 문 작성.
for문은 arr 길이보다 1 작게 ( arr[i] vs arr[i+1] 을 비교하기 위해, 마지막에 arr 길이값을 넘어 오류가 날 수 있음. )
clone에 저장된 값을 다음 값과 비교하여 값이 일치하지 않을 때, Arraylist.add(data)를 통해 list에 값을 넣어줌.
ex) {1,1,2} > arr[0]=1, arr[1]=1 은 비교값이 일치하여 특별한 조작 없이 다음으로 넘어감.
> arr[1]=1, arr[2]=2 에서 비교값이 일치하지 않아 arr[1]의 값을 list(0) 에 저장.
arr 의 마지막 2개의 데이터를 처리하기 위한 조건을 추가함.
{1,1,3,4,4} = {1,3,4} arr[3]=4, arr[4]=4 에서 일치하면 arr[3]만 저장
{1,1,3,4,5} = {1,3,4,5} arr[3]=4, arr[4]=5 에서 상위 조건문을 통해 arr[3]은 저장되었으나, arr[4]를 저장하지 못함.
위 예시와 같이 마지막 2개의 데이터가 동일하다면 1개만 출력되고, 다르다면 2개의 데이터가 저장되어야함.
for문이 arr.length-2 만큼 진행되면, arr[arr.length-2], arr[arr.length-1]를 비교하여
조건에 맞춰 arr[arr.length-1] 데이터를 저장하도록 함.
answer를 ArrayList 의 길이만큼의 배열로 지정하고,
ArrayList.get() 으로 데이터 값을 하나씩 부여함.
[참고]
Arraylist :
https://psychoria.tistory.com/765
Array Clone() :
https://coding-factory.tistory.com/548
[해답]
import java.util.*;
import java.util.ArrayList;
class Solution {
public int[] solution(int []arr) {
int[] clone = arr.clone();
ArrayList<Integer> integers = new ArrayList<>();
loop:
for (int i = 0; i < arr.length - 1; i++) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i]);
}
if (i == arr.length - 2) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i+1]);
break loop;
} else {
integers.add(clone[i]);
break loop;
}
}
}
int[] answer = new int[integers.size()];
for (int i = 0; i < integers.size(); i++) {
answer[i] = integers.get(i);
}
return answer;
}
}
import java.util.*;
import java.util.ArrayList;
class Solution {
public int[] solution(int []arr) {
int[] clone = arr.clone();
ArrayList<Integer> integers = new ArrayList<>();
int count = 0;
loop:
for (int i = 0; i < arr.length - 1; i++) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i]);
System.out.print("비교대상 : " + clone[i] + "vs" + clone[i + 1] + " / " + "count = " + count + " / " + "추가된 integer[" + count + "] = " + integers.get(count) + "\n");
count += 1;
}
// else {
// System.out.print("비교대상 : "+clone[i]+"vs"+clone[i+1]+" / "+ "count = "+count + "\n");
// }
if (i == arr.length - 2) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i+1]);
break loop;
} else {
integers.add(clone[i]);
break loop;
}
}
// System.out.print("{");
// for(int i=0;i<integers.size();i++){
// System.out.print(integers.get(i));
// if(i< integers.size()-1){
// System.out.print(",");
// }
// }
// System.out.print("}\n");
}
int[] answer = new int[integers.size()];
for (int i = 0; i < integers.size(); i++) {
answer[i] = integers.get(i);
}
return answer;
}
}
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
int[] arr = {1,1,5,1,1,6,6,8,4,6,8,1,9,9,8};
int[] result = sol.solution(arr);
System.out.print("{");
for(int i=0;i<result.length;i++){
System.out.print(result[i]);
if(i<result.length-1){
System.out.print(",");
}
}
System.out.print("}\n");
}
}
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
int preNum = 10;
for(int num : arr) {
if(preNum != num)
tempList.add(num);
preNum = num;
}
int[] answer = new int[tempList.size()];
for(int i=0; i<answer.length; i++) {
answer[i] = tempList.get(i).intValue();
}
return answer;
}
}
2. 문자열 내 마음대로 정렬하기
https://programmers.co.kr/learn/courses/30/lessons/12915?language=java
[기본 상태]
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
return answer;
}
}
[풀이에 필요한 조건]
입력받은 문자열에서 뽑아낼 데이터를 담아낼 ArrayList 선언.
ArrayList 에 입력값 문자열 특정 위치의 문자를 추출하고, 문자열을 뒤에 붙여 만든 새로운 데이터를 List에 저장.
ArrayList를 sort 하여 오름차순으로 정렬.
list에 저장된 i번째 값을 2번째 문자부터 끝까지( substring(1,list.get(i).length()) ) answer 배열에 하나씩 저장.
[참고]
ArrayList sort :
https://offbyone.tistory.com/154
ArrayList substring :
https://aries574.tistory.com/9
[해답]
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
list.add(strings[i].charAt(n) + strings[i]);
}
Collections.sort(list);
answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).substring(1, list.get(i).length());
}
return answer;
}
}
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
// System.out.println("받은 str 의 n번째 문자 : "+strings[i].charAt(n)+"와 str의 데이터 : "+ strings[i]);
list.add(strings[i].charAt(n) + strings[i]);
}
// ArrayList 오름차순 배열
Collections.sort(list);
answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
// System.out.println("ArrayList list 에 저장된 정보 " + list.get(i));
// 배열 순서 변경을 위해 앞에 추가된 n번째 문자 + 기존 정보
// substring(i,j) i부터 j까지의 글자 리턴, 아래는 맨 앞글자를 잘라내고 글자의 끝까지 반환
answer[i] = list.get(i).substring(1, list.get(i).length());
// System.out.println("i = "+i+"일 때, answer["+i+"] = "+ answer[i]);
}
return answer;
}
}
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
String[] str = {"abce", "abcd", "cdx"};
int n = 2;
String[] result = sol.solution(str, n);
System.out.print("{");
for(int i=0;i<result.length;i++){
System.out.print(result[i]);
if(i<result.length-1){
System.out.print(",");
}
}
System.out.print("}\n");
}
}
3. 시저 암호
https://programmers.co.kr/learn/courses/30/lessons/12926
[기본 상태]
class Solution {
public String solution(String s, int n) {
String answer = "";
return answer;
}
}
[풀이에 필요한 조건]
Character 형태의 숫자를 받아왔을 때, 결과값으로 리턴되는 ASCII 코드에 대해 알아야 함.
([참고]에 아스키 코드 테이블과 간단한 예시 작성)
입력받은 String 값을 Character 값으로 저장할 ArrayList chr 을 선언.
ArrayList<Character> chr = new ArrayList<>();
for 문에서 List chr 에 값을 저장.
chr.add(s.charAt(i));
Character 값을 계산해줄 Integer 형태의 tmp 선언.
int tmp=0;
입력 받은 값 중 " " (띄어쓰기, SP, 공백) 칸인 경우, 연산 없이 tmp=32 고정.
이 외 입력에 대해 조건부 연산을 진행.
64<tmp<91 로 시작하여, tmp>91이 되는 경우(대문자)와
97<tmp<122 로 시작하여, tmp>123이 되는 경우(소문자)가 별개로 존재.
조건 a 와 b를 동시에 만족해야 True가 되는 &&(AND) 를 사용하여 조건에 맞춰 연산 진행.
넘어가는 숫자에서 26을 빼주어, 알파벳이 매칭된 값으로 변경.
if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}
연산이 완료된 값을 return 하기 전의 String 에 넣어주기 위해 chr_real에 Character형태의 tmp값을 저장.
chr_real.add((char) tmp);
chr_real의 size 만큼 반복하여 각 chr_real 값을 String answer에 하나씩 저장.
answer += chr_real.get(j);
[참고]
ASCII table
https://shaeod.tistory.com/228
[해답]
import java.util.*;
class Solution {
public String solution(String s, int n) {
String answer = "";
ArrayList<Character> chr = new ArrayList<>();
int tmp=0;
ArrayList<Character> chr_real = new ArrayList<>();
if (1<=n && n<=25) {
for (int i = 0; i < s.length(); i++) {
chr.add(s.charAt(i));
if ((int) chr.get(i) == 32) {
tmp = (int) chr.get(i);
}
else {
tmp = (int) chr.get(i) + n;
if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}
}
chr_real.add((char) tmp);
}
}
for(int j=0;j<chr_real.size();j++){
answer += chr_real.get(j);
}
System.out.println(answer);
return answer;
}
}
class Solution {
public String solution(String s, int n) {
String answer = "";
int tmp=0;
ArrayList<Character> chr = new ArrayList<>();
ArrayList<Character> chr_real = new ArrayList<>();
if (1<=n && n<=25) {
for (int i = 0; i < s.length(); i++) {
System.out.print("넣을 값 =" + s.charAt(i));
chr.add(s.charAt(i));
System.out.println(" 입력된 값 =" + chr.get(i));
if ((int) chr.get(i) == 32) {
tmp = (int) chr.get(i);
}
else {
tmp = (int) chr.get(i) + n;
if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}
}
System.out.println("tmp 확인 : " + tmp);
chr_real.add((char) tmp);
System.out.println("chr_real 확인 : " + chr_real);
}
}
for(int j=0;j<chr_real.size();j++){
System.out.println("값확인 : " + chr_real.get(j));
answer += chr_real.get(j);
}
System.out.println(answer);
return answer;
}
}
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
String s = "a B z";
int n = 4;
String result = sol.solution(s,n);
System.out.println("결과값 : " + result);
}
}