Practice1 : 문자열 내림차순으로 배치하기
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
public class OrderByDesc {
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
String str = "Zbcdefg";
String reversed = obd.solution(str);
System.out.println(reversed);
}
public String solution(String s) {
int temp, pos;
StringBuffer sb = new StringBuffer();
char[] strArray = s.toCharArray();
for (int inx = 0; inx < strArray.length - 1; inx++) {
pos = inx;
for (int jnx = inx + 1; jnx < strArray.length; jnx++) {
if (strArray[jnx] > strArray[pos]) {
pos = jnx;
}
}
temp = strArray[inx];
strArray[inx] = strArray[pos];
strArray[pos] = (char) temp;
}
for (int inx = 0; inx < strArray.length; inx++) {
sb.append(strArray[inx]);
}
return sb.toString();
}
}
Practice2 : 가운데 글자 가져오기
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
public class OrderByDesc {
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
String str = "abcde";
// String str = "qwer";
String reversed = obd.solution(str);
System.out.println(reversed);
}
public String solution(String s) {
String answer = "";
int strLength = s.length();
if (strLength % 2 != 0) {
answer = s.substring(strLength / 2 , strLength / 2 + 1);
} else {
answer = s.substring(strLength / 2 - 1, strLength / 2 + 1);
}
return answer;
}
}
Practice3 : 나누어 떨어지는 숫자 배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int[] inputArr = {5, 9, 7, 10};
int divisor = 5;
int [] result = obd.solution(inputArr, 5);
System.out.println(Arrays.toString(result));
}
public int[] solution(int[] array, int divisor) {
int[] resultArray = {};
boolean isNotDivised = true;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int inx = 0; inx < array.length; inx++) {
if (array[inx] % divisor == 0) {
list.add(array[inx]);
isNotDivised = false;
}
}
if (isNotDivised) {
list.add(-1);
resultArray = new int[1];
} else {
resultArray = new int[list.size()];
}
int counter = 0;
for (int value : list) {
resultArray[counter++] = value;
}
Arrays.sort(resultArray);
return resultArray;
}
Practice4 : 두 정수 사이의 합
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
long result = obd.solution(3, 5);
System.out.println(result);
}
public long solution(int a, int b) {
long answer = 0;
if( a < b || a == b){
for(int inx=a; inx <= b ; inx++){
answer += inx;
}
} else {
for(int inx=b; inx <= a ; inx++){
answer += inx;
}
}
return answer;
}
Practice5 : 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다
public static void main(String[] args) {
OrderByStrIWant orderbyI = new OrderByStrIWant();
String [] inputArray = {"sun", "bed", "car"};
int n = 1;
System.out.println(Arrays.toString(orderbyI.solution(inputArray, n)));
}
public String[] solution(String[] inputArray, int n) {
String[] answer = {};
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> tempList = new ArrayList<String>();
for(int inx=0; inx< inputArray.length; inx++) {
String tempStr = inputArray[inx].substring(n,n+1);
tempList.add(tempStr+"-"+inputArray[inx]);
}
Collections.sort(tempList);
for(int inx=0; inx<tempList.size(); inx++) {
list.add(tempList.get(inx).substring(tempList.get(inx).indexOf("-")+1));
}
answer = new String[list.size()];
for(int inx=0 ; inx < answer.length; inx++) {
answer[inx] = list.get(inx);
}
return answer;
}
Practice6 : 문자열 내 p와 y의 개수
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
boolean flag = obd.solution("pPoooyY");
System.out.println(flag);
}
boolean solution(String inputStr) {
boolean resultFlag = true;
char[] strArray = inputStr.toLowerCase().toCharArray();
HashMap<Character, Integer> counterMap = new HashMap<>();
for (Character inputChar : strArray) {
if (counterMap.containsKey(inputChar)) {
counterMap.put(inputChar, counterMap.get(inputChar) + 1);
} else {
counterMap.put(inputChar, 1);
}
}
if (counterMap.get('p') != counterMap.get('y')) {
resultFlag = false;
}
return resultFlag;
}
Practice7 : 핸드폰 번호 가리기
개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
String number = obd.solution("01000009999");
System.out.println(number);
}
public String solution(String phone_number) {
String answer = "";
for (int inx = 0; inx < phone_number.length(); inx++) {
if (phone_number.length() - 4 > inx) {
answer += "*";
} else {
answer += phone_number.charAt(inx);
}
}
return answer;
}
Practice8 : 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
s |
n |
result |
AB |
1 |
BC |
z |
1 |
a |
a B z |
4 |
e F d |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
String result = obd.solution("AB", 1);
System.out.println(result);
}
public String solution(String s, int n) {
String answer = "";
char [] charArray = s.toCharArray();
for(int inx=0; inx<charArray.length; inx++) {
char ch = charArray[inx];
if(ch != ' ') {
if(ch >= 'z') {
ch = (char) ((int)'a' + n - 1);
answer += (char)(ch);
} else {
answer += (char)(ch + n);
}
} else {
answer += (char)(' ');
}
}
return answer;
}
Practice9 : 약수의 합 :
자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int result = obd.solution(12);
System.out.println(result);
}
public int solution(int n) {
int answer = 0;
for(int inx=1; inx<= n; inx++) {
if(n % inx == 0) {
answer += inx;
}
}
return answer;
}
Practice10 : 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
String result = obd.solution("try hello world");
System.out.println(result);
}
public String solution(String s) {
String ss = s.toUpperCase();
String answer = "";
int count = 0;
for (int j = 0; j < s.length(); j++) {
if (s.charAt(j) == ' ') {
count = 0;
answer += " ";
} else if (count % 2 == 0) {
answer += ss.charAt(j);
count++;
} else {
answer += (char)(ss.charAt(j) + 32);
count++;
}
}
return answer;
}