tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool

Tgool

Computer Science/자바

[JAVA] 다항함수 만들기

2023. 2. 10. 15:28

문제


다항함수(polynomial)는 항(term)들의 합이며, 항(term)은 계수(coefcient) 와 지수(exponent)에 의해서 정의된다. 계수는 0이 아닌 정수이고 지수는 음이 아닌 정수라고 가정한다. 예를 들면, f(x) = -x5 + 2x4 -10x - 3

$ create f // 다항함수 f = 0을 정의한다. 
$ add f 2 3 // f(x)에 2x3을 더한다. 따라서 f(x) = 2x3 이 된다.
$ add f -1 1 // f(x) = 2x3 - x 이 된다.
$ add f 5 0 // f(x) = 2x3 - x + 5 이 된다.
$ add f 2 1 // f(x) = 2x3 - x + 5 + 2x = 2x3 + x + 5 이 된다.
$ calc f 2 // x=2일 때 다항함수 f의 값, 즉 f(2) = 23을 계산하여 출력한다.
23 
$ print f // 차수에 관한 내림차순으로 정렬하여 다음과 같이 출력한다.
2x^3 + x + 5 // 동일한 차수의 항은 하나로 합쳐져야 한다. 
$ create g // 다른 다항 함수 g를 정의한다.
…. 
$ exit

 

 

입력

 

 

출력

 

 


코드

public class Term { 
 public int coef; 
 public int expo; 
}
//class Term은 다항식을 구성하는 하나의 항을 표현하기 위한 클래스이다. 계수 (coef)와 차수(expo)를 가진다
public class Polynomial {
 public char name; //다항식의 이름
 public int nTerms = 0; // 항의 개수 == 배열의 개수
 public Term [] terms; //다항식을 구성하는 항들을 저장할 배열
}
public class Code06 {

	static Polynomial [] polys = new Polynomial [100];
	static int n = 0;


	public static void main(String[] args) { 

		Scanner kb = new Scanner(System.in);
		while(true) {
			System.out.println("$ ");
			String command = kb.next();
			if(command.equals("create")){
				char name = kb.next().charAt(0);
				
				Polynomial p = new Polynomial();
				p.name = name;
				p.nTerms = 0;
				
				polys[n] = p;
				polys[n].terms = new Term[100];
				n++;

			}
			else if(command.equals("add")) { //add f 2 3
				char name = kb.next().charAt(0);
				int index = find(name);
				if (index == -1) {
					System.out.println("No such polynomial exists");
				}
				else {
					int c = kb.nextInt();
					int e = kb.nextInt();
					addTerm(polys[index], c, e);
				}
				
			}
			else if(command.equals("calc")) {
				char name = kb.next().charAt(0);
				int index = find(name);
				if (index == -1) {
					System.out.println("No such polynomial exists");
				}
				else {
					int x = kb.nextInt();
					int result = calcPolynomial(polys[index], x);
					System.out.println(result);
				}
			}
			else if(command.equals("print")) {
				char name = kb.next().charAt(0);
				int index = find(name);
				if (index == -1) {
					System.out.println("No such polynomial exists");
				}
				else {
					printPolynomial(polys[index]);
				}
				
			}
			else if(command.equals("exit")) {
				break;
			}
		}


		kb.close();
		
	}


	private static int calcPolynomial(Polynomial p, int x) {
		int result = 0;
		for (int i = 0; i < p.nTerms; i++)
			result += calcTerm(p.terms[i], x);
		return result;
	}


	private static int calcTerm(Term term, int x) {
		return (int)(term.coef * Math.pow(x, term.expo));
	}


	private static void printPolynomial(Polynomial p) {
		for (int i =0; i<p.nTerms; i++) {
			printTerm(p.terms[i]);		
			System.out.println("+");
		}
		System.out.println();
	}


	private static void printTerm(Term term) {
		System.out.println(term.coef + "x^" + term.expo);
		
	}


	private static void addTerm(Polynomial p, int c, int e) {
		int index = findTerm(p,e);
		if(index != -1) {
			p.terms[index].coef += c; // 
		}
		else {
			int i = p.nTerms - 1;
			while(i >= 0 && p.terms[i].expo < e) {
				p.terms[i+1] = p.terms[i];
				i--;
			}
			p.terms[i+1]= new Term();
			p.terms[i+1].coef = c;
			p.terms[i+1].expo = e;
			p.nTerms++;
			
		}
		
	}


	private static int findTerm(Polynomial p, int e) {
		for (int i = 0; i < p.nTerms && p.terms[i].expo >= e; i++)
			if(p.terms[i].expo == e)
				return i;
		
		return -1;
	}


	private static int find(char name) {
		for (int i=0;i<n;i++) {
			if(polys[i].name == name)
				return i;
		}
		return -1;
	}
 
}

'Computer Science > 자바' 카테고리의 다른 글

[JAVA] 객체 생성 및 사용법  (0) 2023.03.23
[JAVA] 클래스 소스파일 작성 유의점  (0) 2023.03.23
[Java] 객체지향개념(요약)  (0) 2023.03.17
[JAVA] 사각형의 면적 구하기  (0) 2023.02.10
[JAVA] 클래스, 객체, 참조변수, 객체배열_JAVA  (0) 2023.02.08
    'Computer Science/자바' 카테고리의 다른 글
    • [JAVA] 클래스 소스파일 작성 유의점
    • [Java] 객체지향개념(요약)
    • [JAVA] 사각형의 면적 구하기
    • [JAVA] 클래스, 객체, 참조변수, 객체배열_JAVA
    tgool
    tgool

    티스토리툴바