More actions
imported>Unknown No edit summary |
(Repair MoniWiki formatting after migration) |
||
| (One intermediate revision by the same user not shown) | |||
| Line 4: | Line 4: | ||
|} | |} | ||
== 모든 수를 수열로 생각 == | == 모든 수를 수열로 생각 == | ||
=== JollyJumpers.java === | === [[JollyJumpers]].java === | ||
import java.io.BufferedReader; | import java.io.BufferedReader; | ||
import java.io.IOException; | import java.io.IOException; | ||
| Line 18: | Line 18: | ||
public class JollyJumpers { | public class JollyJumpers { | ||
int | int [] nums; | ||
public int | public int [] inputNumbers() { | ||
String message = processKeyInput(); | String message = processKeyInput(); | ||
String | String [] ch = splitMessage(message); | ||
return toInt(ch); | return toInt(ch); | ||
} | } | ||
private String | private String[] splitMessage(String message) { | ||
return message.split(" "); | return message.split(" "); | ||
} | } | ||
private int | private int[] toInt(String [] ch) { | ||
int len = ch.length; | int len = ch.length; | ||
nums = new int | nums = new int[len]; | ||
for(int i = 0; i < len; i++) { | for(int i = 0; i < len; i++) { | ||
nums | nums[i] = Integer.parseInt(ch[i]); | ||
} | } | ||
return nums; | return nums; | ||
| Line 50: | Line 50: | ||
} | } | ||
public int | public int[] getdifferenceValue() { | ||
int len = nums.length - 1; | int len = nums.length - 1; | ||
int | int [] differValue = new int[len]; | ||
for(int i = 0; i < len; i++) { | for(int i = 0; i < len; i++) { | ||
differValue | differValue[i] = Math.abs(nums[i+1] - nums[i]); | ||
} | } | ||
nums = sort(differValue); | nums = sort(differValue); | ||
| Line 61: | Line 61: | ||
} | } | ||
private int | private int[] sort(int[] aNum) { | ||
for(int i = 0; i < aNum.length; i++) | for(int i = 0; i < aNum.length; i++) | ||
for(int j = 0; j < aNum.length; j++) | for(int j = 0; j < aNum.length; j++) | ||
if (aNum | if (aNum[i] < aNum[j]) | ||
aNum = swap(aNum, i, j); | aNum = swap(aNum, i, j); | ||
return aNum; | return aNum; | ||
} | } | ||
private int | private int[] swap(int [] aNum, int i, int j) { | ||
int temp = aNum | int temp = aNum[i]; | ||
aNum | aNum[i] = aNum[j]; | ||
aNum | aNum[j] = temp; | ||
return aNum; | return aNum; | ||
| Line 80: | Line 80: | ||
int len = nums.length; | int len = nums.length; | ||
for(int i = 1; i < len; i++) | for(int i = 1; i < len; i++) | ||
if (i != nums | if (i != nums[i-1]) | ||
return false; | return false; | ||
| Line 91: | Line 91: | ||
} | } | ||
} | } | ||
static public void main(String | static public void main(String [] args) { | ||
Vector v = new Vector(); | Vector v = new Vector(); | ||
while(true) { | while(true) { | ||
JollyJumpers j = new JollyJumpers(); | JollyJumpers j = new JollyJumpers(); | ||
j.inputNumbers(); | j.inputNumbers(); | ||
if (j.nums | if (j.nums[0] == 0) { | ||
j.printResult(v); | j.printResult(v); | ||
break; | break; | ||
| Line 108: | Line 108: | ||
== 첫번째 수는 수열의 개수 == | == 첫번째 수는 수열의 개수 == | ||
=== JollyJumpers.java === | === [[JollyJumpers]].java === | ||
import java.io.BufferedReader; | import java.io.BufferedReader; | ||
import java.io.IOException; | import java.io.IOException; | ||
| Line 125: | Line 125: | ||
public class JollyJumpers { | public class JollyJumpers { | ||
int size; | int size; | ||
int | int [] numbers; | ||
public String inputNum() { | public String inputNum() { | ||
| Line 138: | Line 138: | ||
} | } | ||
public int | public int [] stringToInt(String line) { | ||
String | String [] ch = line.split(" "); | ||
int len = ch.length - 1; | int len = ch.length - 1; | ||
numbers = new int | numbers = new int[len]; | ||
size = Integer.parseInt(ch | size = Integer.parseInt(ch[0]); | ||
for (int i = 0; i < len; i++) { | for (int i = 0; i < len; i++) { | ||
numbers | numbers[i] = Integer.parseInt(ch[i+1]); | ||
} | } | ||
return numbers; | return numbers; | ||
| Line 158: | Line 158: | ||
for(int i = 0; i < numbers.length - 1; i++) { | for(int i = 0; i < numbers.length - 1; i++) { | ||
set.add(new Integer(Math.abs(numbers | set.add(new Integer(Math.abs(numbers[i] - numbers[i+1]))); | ||
} | } | ||
return set; | return set; | ||
| Line 199: | Line 199: | ||
} | } | ||
public static void main(String | public static void main(String [] args) { | ||
ArrayList list = new ArrayList(); | ArrayList list = new ArrayList(); | ||
| Line 236: | Line 236: | ||
j = new JollyJumpers(); | j = new JollyJumpers(); | ||
line = "5 1 4 2 -1 6"; | line = "5 1 4 2 -1 6"; | ||
j.numbers = new int | j.numbers = new int[]{1,4,2,-1,6}; | ||
j.size = 5; | j.size = 5; | ||
} | } | ||
| Line 245: | Line 245: | ||
public void testStringToInt() { | public void testStringToInt() { | ||
int | int [] num = {1,4,2,-1,6}; | ||
assertEquals(num | assertEquals(num[0], j.stringToInt(line)[0]); | ||
assertEquals(num | assertEquals(num[1], j.stringToInt(line)[1]); | ||
} | } | ||
| Line 264: | Line 264: | ||
== 쓰레드 == | == 쓰레드 == | ||
# | # | ||
<code>TreeSet</code> | |||
을 사용했다. sort에 log(n)이 소요된다. | 을 사용했다. sort에 log(n)이 소요된다. | ||
# main이 지저분하다. 함수로 추출하기도 뭐하다. | # main이 지저분하다. 함수로 추출하기도 뭐하다. | ||
| Line 271: | Line 271: | ||
---- | ---- | ||
JollyJumpers | [[JollyJumpers]] | ||
Latest revision as of 00:34, 29 March 2026
모든 수를 수열로 생각
JollyJumpers.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
/*
* Created on 2005. 1. 4
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class JollyJumpers {
int [] nums;
public int [] inputNumbers() {
String message = processKeyInput();
String [] ch = splitMessage(message);
return toInt(ch);
}
private String[] splitMessage(String message) {
return message.split(" ");
}
private int[] toInt(String [] ch) {
int len = ch.length;
nums = new int[len];
for(int i = 0; i < len; i++) {
nums[i] = Integer.parseInt(ch[i]);
}
return nums;
}
private String processKeyInput() {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String message = "";
try {
message = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return message;
}
public int[] getdifferenceValue() {
int len = nums.length - 1;
int [] differValue = new int[len];
for(int i = 0; i < len; i++) {
differValue[i] = Math.abs(nums[i+1] - nums[i]);
}
nums = sort(differValue);
return nums;
}
private int[] sort(int[] aNum) {
for(int i = 0; i < aNum.length; i++)
for(int j = 0; j < aNum.length; j++)
if (aNum[i] < aNum[j])
aNum = swap(aNum, i, j);
return aNum;
}
private int[] swap(int [] aNum, int i, int j) {
int temp = aNum[i];
aNum[i] = aNum[j];
aNum[j] = temp;
return aNum;
}
public boolean isJolly() {
int len = nums.length;
for(int i = 1; i < len; i++)
if (i != nums[i-1])
return false;
return true;
}
private void printResult(Vector v) {
for(int i = 0; i < v.size(); i++) {
System.out.println(v.get(i));
}
}
static public void main(String [] args) {
Vector v = new Vector();
while(true) {
JollyJumpers j = new JollyJumpers();
j.inputNumbers();
if (j.nums[0] == 0) {
j.printResult(v);
break;
}
j.getdifferenceValue();
if (j.isJolly()) v.add("Jolly");
else v.add("Not jolly");
}
}
}
첫번째 수는 수열의 개수
JollyJumpers.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;
/*
* Created on 2005. 1. 6.
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class JollyJumpers {
int size;
int [] numbers;
public String inputNum() {
String line = "";
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
line = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
public int [] stringToInt(String line) {
String [] ch = line.split(" ");
int len = ch.length - 1;
numbers = new int[len];
size = Integer.parseInt(ch[0]);
for (int i = 0; i < len; i++) {
numbers[i] = Integer.parseInt(ch[i+1]);
}
return numbers;
}
public boolean isRightInput() {
return size == numbers.length ? true : false;
}
public TreeSet computeGaps() {
TreeSet set = new TreeSet();
for(int i = 0; i < numbers.length - 1; i++) {
set.add(new Integer(Math.abs(numbers[i] - numbers[i+1])));
}
return set;
}
public boolean isJolly(TreeSet set) {
int numOfSeries = size - 1;
if (set.size() != numOfSeries) {
return false;
}
Iterator i = set.iterator();
int series = 1;
while (i.hasNext()) {
Integer num = (Integer) i.next();
if (num.intValue() != series) {
return false;
}
series++;
}
return true;
}
public void printResult(ArrayList list) {
for(int i = 0; i < list.size(); i++) {
System.out.println((String) list.get(i));
}
}
public boolean isException() {
if (size > 3000) {
System.out.println("3000 초과. 다시 입력하세요");
return true;
}
if (!isRightInput()) {
System.out.println("수열의 개수가" + size + "과 다릅니다. 다시 입력하세요");
return true;
}
return false;
}
public static void main(String [] args) {
ArrayList list = new ArrayList();
while(true) {
JollyJumpers j = new JollyJumpers();
String line = j.inputNum();
j.stringToInt(line);
if (j.size == 0) {
j.printResult(list);
break;
}
if (j.isException())
continue;
TreeSet set = j.computeGaps();
if (j.isJolly(set))
list.add("Jolly");
else
list.add("Not jolly");
}
}
}
TestJollyJumpers.java
import junit.framework.TestCase;
/*
* Created on 2005. 1. 6.
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestJollyJumpers extends TestCase {
JollyJumpers j;
String line;
public void setUp() {
j = new JollyJumpers();
line = "5 1 4 2 -1 6";
j.numbers = new int[]{1,4,2,-1,6};
j.size = 5;
}
public void testInputNum() {
j = new JollyJumpers();
assertEquals("5 1 4 2 -1 6", line);
}
public void testStringToInt() {
int [] num = {1,4,2,-1,6};
assertEquals(num[0], j.stringToInt(line)[0]);
assertEquals(num[1], j.stringToInt(line)[1]);
}
public void testIsRightInput() {
assertEquals(5, j.numbers.length);
assertEquals(true, j.isRightInput());
}
public void testIsJolly() {
assertEquals(false, j.isJolly(j.computeGaps()));
}
}
쓰레드
TreeSet
을 사용했다. sort에 log(n)이 소요된다.
- main이 지저분하다. 함수로 추출하기도 뭐하다.
- test코드를 다듬었다. 테스트할때마다 콘솔로 입력받는 게 귀찮아서 test클래스에서 메인 클래스의 field를 정의하고 진행했다. 또 다른 테스트를 하기위해서 고쳐야할 부분이 흩어져 있다. 테스트코드의 설계에 관심을 가져야겠다.
-- 재선