답안 :
package answer;
public class Solution {
public String solution(String X, String Y) {
String answer = "";
StringBuffer sb = new StringBuffer();
// 2개의 문자열 자릿수 검사
int xarr[] = new int[10];
int yarr[] = new int[10];
for (int i = 0; i < X.length(); i++) {
xarr[X.charAt(i) - '0']++;
}
for (int i = 0; i < Y.length(); i++) {
yarr[Y.charAt(i) - '0']++;
}
// 겹치는 숫자를 확인하여 Buffer에 저장
for (int i = 9; i >= 0; i--) {
//두개의 자릿수중 겹치는 숫자만큼 반복문으로 삽입.
int count = Math.min(xarr[i], yarr[i]);
for (int j = 0; j < count; j++) {
sb.append(i);
}
}
// 겹치는 숫자가없을시
if (sb.length() == 0) {
answer = "-1";
return answer;
//0만있을경우
} else if (sb.charAt(0) == '0') {
answer = "0";
return answer;
}
answer = sb.toString();
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution s = new Solution();
String x = "12321";
String y = "42531";
System.out.println(s.solution(x, y));
}
}
알고리즘 설명 : 2개의 배열을 통해 X와 Y가 가지고 있는 숫자와 갯수를 인덱스를 통해 파악.
이후 i를 0~9 까지 역순하여 두 배열중 겹친 최소중복만큼 반복문으로 버퍼에 삽입.
아래에서 예외처리를 해주고 문자열로 리턴. 큰수가 올수가있기에 String Buffer 활용
틀린답안
if(x[i]>=1 && y[i]>=1){
sb.append();
}
package answer;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public String solution(String X, String Y) {
String answer = "";
int zerocnt = 0;
ArrayList<Character> xarr = new ArrayList<>();
ArrayList<Character> yarr = new ArrayList<>();
ArrayList<Character> barr = new ArrayList<>();
for (int i = 0; i < X.length(); i++) {
xarr.add(X.charAt(i));
}
for (int j = 0; j < Y.length(); j++) {
yarr.add(Y.charAt(j));
}
Collections.sort(xarr);
Collections.sort(yarr);
if (xarr.size() < yarr.size()) {
for (int i = 0; i < yarr.size(); i++) {
for (int j = 0; j < xarr.size(); j++) {
if (yarr.get(i).equals(xarr.get(j))) {
barr.add(yarr.get(i));
break;
}
}
}
} else {
for (int i = 0; i < xarr.size(); i++) {
for (int j = 0; j < yarr.size(); j++) {
if (yarr.get(i).equals(xarr.get(j))) {
barr.add(yarr.get(i));
break;
}
}
}
}
Collections.sort(barr, Collections.reverseOrder());
if (barr.size() == 0) {
answer = "-1";
} else {
for (char item : barr) {
if (item == '0' && zerocnt == 0) {
answer += item;
zerocnt++;
} else if (item != '0') {
answer += item;
}
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution s = new Solution();
String x = "12321";
String y = "42531";
System.out.println(s.solution(x, y));
}
}
답안 :
SELECT concat("/home/grep/src/",u2.BOARD_ID,"/",u2.FILE_ID,u2.FILE_NAME,u2.FILE_EXT) as 'FILE_PATH'
from USED_GOODS_BOARD u1
left join USED_GOODS_FILE u2
on u1.BOARD_ID = u2.BOARD_ID
where u1.VIEWS=(Select max(VIEWS) from USED_GOODS_BOARD )
order by 1 desc
답안 :
select f1.FLAVOR
from FIRST_HALF f1
Inner join(select FLAVOR,sum(TOTAL_ORDER) as JULY_TOTAL_ORDER
from JULY
group by FLAVOR) j1
on f1.FLAVOR = j1.FLAVOR
order by f1.TOTAL_ORDER + JULY_TOTAL_ORDER desc
Limit 3
JULY 테이블의 데이터가 섞여있는 경우이기에 group by를 통해 한번 묶어주고 join을 하면 한번의 연산만으로도 결과를 구하기가 가능.
대체적으로 서브쿼리를 잘사용하여 원하는데이터를 가공하는 작업이 주가 되는것 같다.