💡 고차항부터 저차항 순으로 입력됨, 항은 다항식 2개 모두 3개씩 입력됨
PolynomialImpl.java
public interface PolynomialImpl {
void read();
static Polynomial add(Polynomial a, Polynomial b) {
return new Polynomial();
}
void print();
}
Term.java
public class Term {
private int coef; // 계수
private int exp; // 지수
public Term(int c, int e) {
coef = c;
exp = e;
}
public int getCoef() {
return coef;
}
public void setCoef(int newCoef) {
coef = newCoef;
}
public int getExp() {
return exp;
}
public void setExp(int newExp) {
exp = newExp;
}
@Override
public String toString() {
return getCoef() + "x^" + getExp();
}
}
Polynomial.java
import java.util.Scanner;
public class Polynomial implements PolynomialImpl{
Scanner sc = new Scanner(System.in);
private final Term[] termArr; // 0이 아닌 항의 배열
private int terms; // 0이 아닌 항의 수
public Polynomial() {
termArr = new Term[3];
terms = termArr.length;
}
// 다항식 입력
@Override
public void read() {
int c = 0, e = 0;
for(int i = 0; i < termArr.length; i++) {
termArr[i] = new Term(c, e);
}
for (Term term : termArr) {
term.setCoef(sc.nextInt());
term.setExp(sc.nextInt());
}
}
// 다항식 덧셈 연산
static Polynomial add(Polynomial a, Polynomial b) {
Polynomial c = new Polynomial(); // 덧셈 결과 저장할 다항식 c
int aPos = 0, bPos = 0, cPos = 0;
int coef = 0, exp = 0;
int at = a.terms, bt = b.terms; // a와 b의 항의 개수
while((aPos < at) && (bPos < bt)) {
if(a.termArr[aPos].getExp() == b.termArr[bPos].getExp()) { // a와 b가 같을 때
c.termArr[cPos] = new Term(coef, exp);
c.termArr[cPos].setCoef(a.termArr[aPos].getCoef() + b.termArr[bPos].getCoef());
c.termArr[cPos].setExp(b.termArr[bPos].getExp());
aPos++; bPos++; cPos++;
}
else if(a.termArr[aPos].getExp() < b.termArr[bPos].getExp()) { // b가 더 클 때
c.termArr[cPos].setCoef(b.termArr[bPos].getCoef());
c.termArr[cPos].setExp(b.termArr[bPos].getExp());
aPos++; bPos++; cPos++;
}
else { // a가 더 클 때
c.termArr[cPos].setCoef(a.termArr[aPos].getCoef());
c.termArr[cPos].setExp(a.termArr[aPos].getExp());
aPos++; bPos++; cPos++;
}
}
return c;
}
// 결과값 출력
@Override
public void print() {
for(int i = 0; i < termArr.length; i++) {
if(i == termArr.length-1) {
System.out.print(termArr[i].toString());
}
else {
System.out.print(termArr[i].toString() + " + ");
}
}
System.out.println();
}
}
PolyAddApp.java
public class PolyAddApp {
public static void main(String[] args) {
Polynomial poly1 = new Polynomial();
Polynomial poly2 = new Polynomial();
Polynomial resPoly = new Polynomial();
System.out.println("첫번째 다항식을 계수-지수 순으로 입력하세요");
poly1.read();
System.out.print("다항식 1 : ");
poly1.print();
System.out.println("두번째 다항식을 계수-지수 순으로 입력하세요");
poly2.read();
System.out.print("다항식 2 : ");
poly2.print();
resPoly = Polynomial.add(poly1, poly2);
System.out.println("========================================");
System.out.print("덧셈 결과 : ");
resPoly.print();
}
}