๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 9440๋ฒ ์ซ์ ๋ํ๊ธฐ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
9440๋ฒ: ์ซ์ ๋ํ๊ธฐ
๊ฐ๋ฏผ์ด๊ฐ ์ด๋ฑํ๊ต 3ํ๋ ์ผ ๋, ๋ด์์ ์๋์ด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋์๋ค. ์ซ์ 1, 2, 7, 8, 9 ๋ฅผ ์ฌ์ฉํด์ ๋ง๋ ๋ ์ซ์๋ฅผ ๋ํ์ ๋, ๋์ฌ ์ ์๋ ๊ฐ์ฅ ์์ ์๋ ๋ฌด์์ผ๊น์? ๊ฐ๋ฏผ์ด๋ ์ด ๋ฌธ์ ์ ๋ต์ด 2
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ์ ๋ ฌ๊ณผ ๊ทธ๋ฆฌ๋๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ์์ ํต์ฌ์
์ซ์๋ฅผ ์ ๋ ฌํ๊ณ 0 ~ ์ซ์ ๋ฐฐ์ด ๊ธธ์ด๋งํผ ๋ฐ๋ณตํ๋ฉฐ ์๋ก ๋ค๋ฅธ ๋ ์์ ๋ง์ง๋ง ์๋ฆฌ์ ์ถ๊ฐ ํด์ฃผ๋ ๊ฒ
์ด๊ฒ์ด ํต์ฌ์ด๋ค.
์๋ฅผ ๋ค์ด 1 2 7 8 9 ๋ผ๋ ์๊ฐ ์๋ค๊ณ ํด๋ณด์.
๊ทธ๋ผ ์์ ํต์ฌ๋๋ก ๋ฌธ์ ๋ฅผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์์ด ๋ ๊ฒ์ด๋ค.
arr = 1, 2, 7, 8, 9;// ์ ๋ ฌ๋ ์ํ
// ์ฒซ ๋จ๊ณ
num1 = 1
num2 = 2
// ๋ ๋ฒ์จฐ
num1 = 1, 7
num2 = 2, 8
// ์ธ ๋ฒ์งธ
num1 = 1, 7, 9
num2 = 2, 8;
์ด๋ฐ์์ผ๋ก ํด์ ์ต์ข
์ ์ผ๋ก num1 + num2
๋ฅผ ์ํํด์ผ ์ต์๊ฐ์ด ๋์จ๋ค.
์ค๋ต ํ๋ณด
ํ์ง๋ง ์ด๋ค ์ฌ์ด์ 0์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
0์ด ์๋ ๊ฒฝ์ฐ ์ ๋ ฌ์ ํ๋ค๋ฉด arr = 0 1 2 3 4 0 1 2 3;
์์ arr = 0 0 1 1 2 2 3 3 4;
๊ฐ ๋๋ค.
์ด๋๋ก ์ ๋ต์ ์ถ๋ ฅํ๋ค๋ฉด 0์ผ๋ก ์์ํ๋ ์๊ฐ ์๊ธฐ๊ฒ ๋๊ณ , ๊ทธ๋ฌ๋ฉด AC๋ฅผ ๋ฐ์ ์ ์๋ค.
์ด๋ ๊ฒ 0์ด ์๋ ๊ฒฝ์ฐ์๋ 0์ ์ฒ์์ผ๋ก ๋ฑ์ฅํ๋ ์ ๋ค๋ก ์จ๊ฒจ์ค์ผ ํ๋ค.
arr = 0 0 1 1 2 2 3 3 4;
์์ arr = 1 1 0 0 2 2 3 3 4;
์ด๋ฐ ๋ก์ง์ ์ถ๊ฐํ๋ฉด ์ ๋ต์ด ๋๋ค.
๋๋ ํด๋น ์ฐ์ฐ์ ์ํด์ 0์ด ๋ฑ์ฅํ ํ์์์ + 2๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก shift ์ฐ์ฐ ์ ํ์๋ค.
๋ง์ฝ ์ฌํํธ ์ฐ์ฐ์ ์์ง ๋ชปํ๋ค๋ฉด ์๋ฐ๋ก ์๊ณ ๋ฆฌ์ฆ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฐ์ด shift ๊ตฌํํ๊ธฐ ์ ์ฐธ๊ณ ํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
while(true) {
String[] ns = br.readLine().split(" ");
if(ns.length == 1 && ns[0].equals("0")) break;
int n = Integer.parseInt(ns[0]);
int[] arr = new int[n];
int zeroCount = 0;
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(ns[i+1]);
if(arr[i] == 0) zeroCount++;
}
Arrays.sort(arr);
if(zeroCount > 0) {
int[] tempArr = new int[zeroCount + 2];
for(int i = 0; i < zeroCount + 2; i++) {
tempArr[i] = arr[i];
}
leftShift(tempArr);
for(int i = 0; i < zeroCount + 2; i++) {
arr[i] = tempArr[i];
}
}
StringBuilder num1 = new StringBuilder();
StringBuilder num2 = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if(i % 2 == 0) num1.append(arr[i]);
else num2.append(arr[i]);
}
int n1 = Integer.parseInt(num1.toString());
int n2 = Integer.parseInt(num2.toString());
bw.write((n1 + n2) + "\n");
bw.flush();
}
bw.close();
}
private static void swap(int[] arr, int index1, int index2) {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
private static void reverse(int[] arr, int start, int end) {
end = end - 1;
while(start < end) {
swap(arr, start, end);
start++;
end--;
}
}
private static void leftShift(int[] arr) {
int size = arr.length;
reverse(arr, size - 2, size);
reverse(arr, 0, size - 2);
reverse(arr, 0, size);
}
}
๋๊ธ