반응형

문제

명령을 실행하는 소프트웨어를 작성하라. 명령은 다음과 같이 mov, add, sub, jn0, prt로 구성되면 move sum 0는 sum 변수에 0을 삽입하고, add sum i는 sum 변수에 i 값을 더하면 sub n 1은 n 변수의 값을 1 감소시키고, jn0 n 3은 변수 n의 값이 0이 아니면 3 번째 명령(실제 4번째 줄)으로 돌아가도록 처리하고, prt sum 0은 sum 변수의 값을 출력하고 프로그램을 종료한다. prt에서 마지막 0은 특별한 의미가 없다. go는 지금까지 입력한 프로그램을 처음부터 실행하도록 하는 지시어이다.
참고로, 실행 예시에서 첫 번재 프로그램은 5에서 15까지 더하는 프로그램이다.

 

예시 답안

수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.
>> mov sum 0
>> mov i 5
>> mov n 10
>> add sum i
>> add i 1
>> sub n 1
>> jn0 n 3
>> prt sum 0
>> go
[ptr sum 0]
I:15 SUM:95 N:0
출력할 결과는 95. 프로그램 실행 끝
>> mov n 100
>> mov m 20
>> add n m
>> sub n 5
>> prt n 0
>> go
[prt n 0]
M:20 N:115
출력할 결과는 115. 프로그램 실행 끝
>>

 

소스 코드

(한번만 실행되게 만들었습니다.)

import java.util.*;

class ControlProgram{
	ArrayList<String> excution = new ArrayList<String>();
	ArrayList<String> temp = new ArrayList<String>();
	HashMap<String,Integer> var = new HashMap<String,Integer>();
	ArrayList<String> num = new ArrayList<String>();
	
	String [] alpha= {"a","b","c","d","e","f","g",
			"h","i","j","k","l","n","m","o",
			"p","q","r","s","t","u","v","w","x","y","z"};
	
	public ControlProgram() {
		Scanner s = new Scanner(System.in);
		System.out.println("수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.");
		
		while(true) {
			System.out.print(">> ");
			String temp1 = s.next();
			if(temp1.equals("go"))
				break;
			String temp2 = s.next();
			String temp3 = s.next();
			s.nextLine();
			excution.add(temp1);
			temp.add(temp2);
			num.add(temp3);
		}
		run();
		
		s.close();
	}
	private boolean Compare(String s) {
		for(int i = 0;i<alpha.length;i++)
		{
			if(s.contains(alpha[i]))
				return true;
		}
		return false;
	}
	
	private void run() {
		int count = 0;
		while(true) {
			switch(excution.get(count)) {
			case "mov":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.put(temp.get(count),var.get(num.get(count)));
				else // 알파벳이 아니라 정수형이면
					var.put(temp.get(count), Integer.parseInt(num.get(count)));
				count++;
				break;
			case "add":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.replace(temp.get(count), var.get(temp.get(count))+var.get(num.get(count)));
				else
					var.replace(temp.get(count), var.get(temp.get(count))+Integer.parseInt(num.get(count)));
				count++;
				break;
			case "sub":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.replace(temp.get(count), var.get(temp.get(count))-var.get(num.get(count)));
				else
					var.replace(temp.get(count), var.get(temp.get(count))-Integer.parseInt(num.get(count)));
				count++;
				break;
			case "jn0":
				int k;
				if(Compare(num.get(count)))
					k = var.get(num.get(count));
				else
					k = Integer.parseInt(num.get(count));
				if(var.get(temp.get(count)) != 0)
					count = k;
				else
					count++;
				break;
			case "prt":
				if(Compare(num.get(count)))
					System.out.println("[ptr "+ temp.get(count) +" "+ var.get(num.get(count)) +"]");
				else
					System.out.println("[ptr "+ temp.get(count) + " " + num.get(count) + "]");
				Set<String> keys = var.keySet();
				Iterator<String> it = keys.iterator();
				for(int i =0;i<var.size();i++)
				{
					String t = it.next();
					System.out.print(t.toUpperCase()+":"+var.get(t)+" ");
				}
				System.out.println();
				System.out.println("출력할 결과는 "+ var.get(temp.get(count))+". 프로그램 실행 끝");
				return;
			}
		}
	}
}

public class Main13 {
	public static void main(String[] args){
		new ControlProgram();
	}
}
반응형
반응형

문제

Open Challenge를 수정하여 사용자가 단어를 삽입할 수 있도록 기능을 추가하라.

 

출력 예시

**** 영어 단어 테스트 프로그램 "명품영어" 입니다. ****
단어 테스트:1, 단어 삽입:2, 종료:3 >> 1
현재 17개의 단어가 들어 있습니다. -1을 입력하면 테스틑 종료합니다.
eye?
(1)눈 (2)동물 (3)사랑 (4)감정 :>1
Excellent !!
human?
(1)인간 (2)감정 (3)거래 (4)그림 :> 2
No. !!
fault?
(1)오류 (2)감정 (3)사회 (4)조각상 :> 1
Excellent !!
emotion?
(1)그림 (2)사랑 (3)거래 (4)감정 :> ㅁ러미  -잘못입력한경우
숫자를 입력하세요 !!
painting?
(1)거래 (2)눈 (3)애인 (4)그림 :> 4
Excellent !!
animal?
(1)사회 (2)그림 (3)동물 (4)눈 :> -1  -단어 테스트 종료

단어 테스트:1, 단어 삽입:2, 종료:3 >> 2
영어 단어에 그만을 입력하면 입력을 종료합니다.
영어 한글 입력 >> flag 깃발
영어 한글 입력 >>  friend 친구
영어 한글 입력 >>  computer 컴퓨터
영어 한글 입력 >>  imagine 상상
영어 한글 입력 >>  smile 웃음
영어 한글 입력 >>  그만

단어 테스트:1, 단어 삽입:2, 종료:3 >> 1
smile?
(1)상상 (2)사회 (3)웃음 (4)주식 :> 3
Excellent !!
freind?
(1)오류 (2)친구 (3)자기 (4)사진 :> 2
Excellent !!
dall?
(1)컴퓨터 (2)인형 (3)상상 (4) 사랑 :> -1

단어 테스트:1, 단어 삽입:2, 종료:3 >> 3
"명품영어"를 종료합니다.

 

소스 코드

import java.util.*;

class WordTest {
	HashMap<String,String> HM = new HashMap<String,String>();
	ArrayList<Boolean> Check = new ArrayList<Boolean>(); //문제를 냈는지 체크
	WordTest(){
		HM.put("love","사랑");
		HM.put("animal","동물");
		HM.put("emtion","감정");
		HM.put("human","인간");
		HM.put("stock","주식");
		HM.put("trade","거래");
		HM.put("society","사회");
		HM.put("baby","아기");
		HM.put("honey","애인");
		HM.put("dall","인형");
		HM.put("bear","곰");
		HM.put("picture","사진");
		HM.put("painting","그림");
		HM.put("fault","오류");
		HM.put("example","보기");
		HM.put("eye","눈");
		HM.put("statue","조각상");

		Scanner s = new Scanner(System.in);
		int Input;
		
		while(true) {
			System.out.println("**** 영어 단어 테스트 프로그램 \"명품영어\" 입니다. ****");
			System.out.print("단어 테스트: 1, 단어 삽입: 2, 종료: 3>>");
			Input  = s.nextInt();
			s.nextLine();
			switch(Input) {
			case 1:
				for(int i = 0;i<HM.size();i++)
					Check.add(false); //초기화
				System.out.println("현재 "+HM.size()+"개의 단어가 들어 있습니다. -1을 입력하면 테스트를 종료합니다");
				TestRun(s);
				System.out.println();
				break;
			case 2:
				System.out.println("영어 단어에 그만을 입력하면 입력을 종료합니다.");
				AddWord(s);
				System.out.println();
				break;
			case 3:
				System.out.println("\"명품영어\"를 종료합니다.");
				return;
			}
		}
	}
	private void TestRun(Scanner s) {
		Set<String> keys = HM.keySet();
		int TestTime = 0;
		while(true) {
			if(TestTime>=HM.size()) {
				System.out.println("모든 테스트를 진행하였습니다. 종료합니다.");
				return;
			}
			Iterator<String> it = keys.iterator();
			Iterator<String> it2 = keys.iterator();
			int size = HM.size()-1;
			int Random = (int)(Math.random()*size);
			String problem = "";
			if(Check.get(Random) != false)
				continue;
			int k = 0;
			while(it.hasNext()) {
				String temp=it.next();
				if(k == Random)
				{
					problem = temp;
				}
				k++;
			}
			TestTime++;
			System.out.println(TestTime + "번째 실행");
			System.out.println(problem);
			int order[] = new int[4];
			int random1,random2,random3;
			while(true) {
			random1 = (int)(Math.random()*size);
			random2 = (int)(Math.random()*size);
			random3 = (int)(Math.random()*size);
			if(random1 != random2 && random1 != random3 &&
					random1 != Random && random2 != random3 && 
					random2 != Random && random3 != Random)
				break;
			}
			
			order[0] = random1;
			order[1] = random2;
			order[2] = random3;
			order[3] = Random;
			
			Arrays.sort(order);
			int count = 0;
			for(int i =0;i<HM.size();i++)
			{
				String temp = it2.next();
				for(int j = 0;j<4;j++) {
					if(i == order[j])
						System.out.print("("+ ++count + ")" + HM.get(temp) + " ");
				}
			}
			System.out.print(" :> ");
			try {
			int Input = 0;
			Input = s.nextInt();
			if(Input == -1)
				break;
			else if(order[Input-1] == Random)
				System.out.println("Excellent !!");
			else
				System.out.println("NO. !!");
			}
			catch(InputMismatchException e) {
				System.out.println("숫자를 입력하세요 !!");
				s.nextLine();
				continue;
			}
		}
		
		
	}
	private void AddWord(Scanner s) {
		while(true) {
			System.out.print("영어 한글 입력 >> ");
			String eng = s.next();
			if(eng.equals("그만"))
				break;
			String kor = s.next();
			HM.put(eng, kor);
			Check.add(false);
		}
	}
}
public class Main12 {

	public static void main(String[] args) {
		new WordTest();
	}

}

테스트 횟수를 카운트하고 금 범위를 넘어가면 강제로 테스트 종료하여 메인 메뉴로 나가게 하였습니다.

반응형
반응형

문제

키보드로 10개의 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 키보드로부터 입력받아 인구를 출력하는 프로그램을 다음과 같이 해시맵을 이용하여 작성하라.

 

소스코드

import java.util.*;
public class Main3 {

	public static void main(String[] args) {
		HashMap<String,Integer>nations =new HashMap<String,Integer>();
		Scanner scan = new Scanner(System.in);
		
		String Contry;
		int PeopleNumber;
		
		for(int i=0;i<10;i++)
		{
			Contry = scan.next();
				PeopleNumber = scan.nextInt();
			nations.put(Contry,PeopleNumber);
		}
		
		//입력 확인을 위한 출력문
		Set<String>keys = nations.keySet();
		Iterator<String> it = keys.iterator();
		
		while(it.hasNext()) {
			String key = it.next();
			System.out.println("("+key+", "+nations.get(key)+")");
		}
		
		System.out.print("찾으시는 나라를 입력하세요 : ");
		String find = scan.next();
		if(nations.containsKey(find)) {
			System.out.println("찾으시는 나라가 존재합니다.");
			System.out.println("나라 이름 : " + find+", 인구 수 : "+nations.get(find));
		}
		else {
			System.out.println("찾으시는 나라는 Hashmap에 존재하지 않습니다");
		}
		
		
		scan.close();
	}

}

결과

한국 1 미국 2 중국 34 인도 12 일본 0 북극 2 남극 0 독일 2 아르헨티나 3 유럽 2
(독일, 2) (미국, 2) (인도, 12) (일본, 0) (중국, 34) (유럽, 2) (남극, 0) (한국, 1) (북극, 2) (아르헨티나, 3)
찾으시는 나라를 입력하세요 : 한국
찾으시는 나라가 존재합니다.
나라 이름 : 한국, 인구 수 : 1
반응형
반응형

문제

Scanner 클래스를 사용하여 5개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 출력하는 프로그램을 작성하라.

 

소스코드

import java.util.*;
// ArrayList연습
public class Main2 {

	public static void main(String[] args) {
		ArrayList<String> array = new ArrayList<String>();
		
		Scanner scan = new Scanner(System.in);
		System.out.print("5개의 학점을 입력하세요 : ");
		for(int i =0 ;i<5;i++) {
			String temp = scan.next();
			array.add(temp);
		}
		
		for(int i = 0;i<array.size();i++) {
			String temp = array.get(i); // i번째 문자열 얻어오기
			if(temp.equals("A")) {
				System.out.println("학점 ["+temp + "] = 4.0");
			}
			else if(temp.equals("B")){
				System.out.println("학점 [" + temp + "] = 3.0");
			}
			else if(temp.equals("C")){
				System.out.println("학점 [" + temp + "] = 2.0");
			}
			else if(temp.equals("D")){
				System.out.println("학점 [" + temp + "] = 1.0");
			}
			else
				System.out.println("학점 [" + temp + "] = 0");
		}
        scan.close();
	}

}

결과

5개의 학점을 입력하세요 : A B C D F
학점 [A] = 4.0
학점 [B] = 3.0
학점 [C] = 2.0
학점 [D] = 1.0
학점 [F] = 0
반응형
반응형

문제

Scanner 클래스를 사용하여 10개의 실수 값을 키보드로부터 읽어 벡터에 저장한 후, 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

 

소스코드

import java.util.*;
// Vector연습
public class Main1 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Vector<Double> num = new Vector<Double>();
		System.out.println("10개의 실수를 입력하시오");
		for (int i = 0; i < 10; i++) {
			num.add(scan.nextDouble());
		}
		
		double max = 0.0;
		double temp = 0.0;
		Iterator<Double>it = num.iterator();
		while (it.hasNext()) {
			temp = it.next();
			max = (max > temp) ? max : temp;
		}
		System.out.println("10개의 실수 중 최대값은 : "+ max);
        scan.close();
	}

}

결과

반응형

+ Recent posts