νμ΄ λ°©ν₯ ¶
λ¨μν μ¬λμ΄ λ§μ
μ νλ μμΌλ‘ νμλ€. λμ리 λΆν° νλμ© λν΄κ°λ©°, μ¬λ¦Όμκ° λ°μνμ κ²½μ° κ°μ΄ λνλ λ°©μμ μ΄μ©νλ€.
~cpp 1234 + 567 ---- 1081
μμμμ²λΌ, κ·Έλμ λ ν°μλ₯Ό μμ λκ³ λνλλ°μ μ΅μν΄μ Έ μκΈ°μ κ°μ λ°©μμ λ°λλ€. (κ²½νμ, μ΄λ€ νΉλ³ν μκ³ λ¦¬μ¦μ λ°λ₯΄λκ² μλλΌλ©΄, νμ€ μΈκ³λ₯Ό λͺ¨λΈλ§νλκ² νΈνκ² κ°λ€.)
μ«μ μμ±κΈ° ¶
νμ΄ λ°©ν₯μ μ νκ³ λ³΄λ, μ«μλ₯Ό νλμ© λμμλΆν° λΌμ΄μ¬ νμκ° μκ²Όλ€.
ν
μ€νΈ μμ± (NumberGeneratorTest.java)
μ§κΈ μκ°ν΄λ³΄λ©΄
see NowOrNever
~cpp package primaryarithmetic; import junit.framework.TestCase; public class NumberGeneratorTest extends TestCase { public void testNoNumber() { NumberGenerator ng = new NumberGenerator(); assertFalse( ng.hasNext() ); } public void test123() { NumberGenerator ng = new NumberGenerator(123); assertEquals( 3, ng.next() ); assertEquals( 2, ng.next() ); assertTrue( ng.hasNext() ); assertEquals( 1, ng.next() ); assertFalse( ng.hasNext() ); } }
~cpp testNoNumber
λ νμμλκ² κ°λ€. λμ€μ κΈμ μ°λ€λ³΄λ, κ°μ΄ μ°κ² λ¬λλ° μλλ μμ ν
μ€νΈλ₯Ό λ¨Όμ μμ±νκ³ ν
μ€νΈ ν΅κ³Όν μλμͺ½ ν
μ€νΈλ₯Ό μΆκ°νλ€. μ΄λ² μμ
κ³Ό λ³λλ‘ μ½λ©νμ λκ°νμλ κ²°κ΅ λμΉλκ² λ§λ€λκ±Έ λ€μνλ² μ¦λͺ
νκ² λλ€. .png)
μ ν
μ€νΈλ₯Ό λ§μ‘±νλ μ½λ μμ± (NumberGenerator.java)
~cpp package primaryarithmetic; public class NumberGenerator { private int number; private byte[] numbers; private int numPointer; public NumberGenerator() { number = -1; } public NumberGenerator( int number ) { if( number < 0 ) throw new ArithmeticException( "0 λλ κ·Έ μ΄μμ μ μλ§ κ°λ₯ν©λλ€: " + number ); this.number = number; init(); } private void init() { numbers = String.valueOf(number).getBytes(); numPointer = numbers.length - 1; } public boolean hasNext() { if( number == -1 ) return false; return numPointer >= 0; } public int next() { return numbers[numPointer--] - '0'; } }
PrimaryArithmetic ¶
μ¬κΈ°μλ λ§μ°¬κ°μ§λ‘ ν
μ€νΈλ₯Ό μμ±νκ² λ¬λλ°, μ½λλ₯Ό μΆκ°νλ€λ³΄λ λΉμ·ν ν¨ν΄μΌλ‘ ν
μ€νΈλ₯Ό νκ² λμ, ν
μ€νΈ μ
μΆκ°λ‘ μ΄λ€μ§λλ‘ ν
μ€νΈλ₯Ό ꡬμ±
ν
μ€νΈ μμ± (PrimaryArithmeticTest.java)
(μμλ, νλ μ€κ°μ λ¬Έμλ₯Ό μμ±νμ§ μμΌλ 컀λ€λ λκΈ°κ° μλν μμΈν μ°μ§ μκ² λλ€. νν)
~cpp package primaryarithmetic; import junit.framework.TestCase; public class PrimaryArithmeticTest extends TestCase { public void testCases() { int [][] sets = { { 0, 1, 1 }, { 1, 5, 5 }, { 3, 555, 555 }, { 0, 123, 456 }, { 1, 123, 594 } }; for( int i=0; i<sets.length; i++ ) { int expected = sets[i][0]; int num1 = sets[i][1]; int num2 = sets[i][2]; verify( expected, num1, num2 ); } } private void verify(int expected, int num1, int num2) { int result = PrimaryArithmetic.add(num1, num2); try { assertEquals( expected, result ); } catch( Throwable e ) { throw new ArithmeticException( "We expected " + expected + ", but was " + result + " (num1=" + num1 + ", num2=" + num2 + ")" ); } } }
ν
μ€νΈλ₯Ό λ§μ‘±νλ μ½λ μμ± (PrimaryArithmetic.java)
~cpp package primaryarithmetic; public class PrimaryArithmetic { public static int add( int num1, int num2 ) { NumberGenerator ng1 = new NumberGenerator( Math.max(num1, num2) ); NumberGenerator ng2 = new NumberGenerator( Math.min(num1, num2) ); int counts = 0; int sumUp = 0; while( ng1.hasNext() && ng2.hasNext() ) { int n1 = ng1.next(); int n2 = ng2.next(); int sum = n1 + n2 + sumUp; if( sum >= 10 ) { sumUp = 1; counts ++; } else sumUp = 0; } while( sumUp == 1 && ng1.hasNext() ) { int sum = ng1.next() + sumUp; if( sum >= 10 ) counts ++; else break; } return counts; } }
μμ©νλ‘κ·Έλ¨μΌλ‘ ¶
μΈμ΄ νΉμ±μ λΌμΈμκ° κΈΈμ΄μ§λκ±Έ λλΌλ©° (PrimaryArithmeticApp.java)
~cpp package primaryarithmetic; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class PrimaryArithmeticApp { public static void main( String [] args ) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader( System.in )); String line; while( (line=in.readLine()) != null ) { String [] numbers = line.split( " " ); int num1 = Integer.parseInt( numbers[0] ); int num2 = Integer.parseInt( numbers[1] ); if( num1 == 0 && num2 == 0 ) break; int counts = PrimaryArithmetic.add( num1, num2 ); print( counts ); } } private static void print( int counts ) { String occurs = (counts == 0) ? "No" : String.valueOf(counts); String postfix = (counts > 1) ? "s" : ""; System.out.println( occurs + " carry operation" + postfix + "." ); } }
λΆλ‘ (μ¨νλΌμ΄μ¦ λ²μ ) ¶
λ¬Έμ νμ΄λ₯Ό μν΄μ λ³λ€λ₯Έ μκ³ λ¦¬μ¦μ΄ μλ νμ€μμμ λ§μ
λ°©λ²μ μ¬μ©νκ³ , μ½λλμ΄ λ³λ‘ λμ§ μμμλ 1μκ°μ΄ κ±Έλ¦°κ²μ λμ€μ msnμΌλ‘ μΉκ΅¬κ³Ό μ±ν
μ νλ©° νκΈ° λλ¬Έμ΄λ€. λ³ΈμΈμ΄ λλΌκΈ°μλ msnμ μΌλ§ νμ§ μμλκ² κ°μλ° μ€μ λ‘λ μκ°μ΄ κ½€ μ§λμλκ±Έ 보면 μμΈμνμΈμ μλμ±μ리μ λ°λΌ μκ°μ΄ νλ¦μ μ μ μλ€. μ§μ₯μΈμ κ²½μ° μ΄κ²μ μ’ λ μΌλ°ν ν΄λ³΄λ©΄, 'μ μ§ μ€λ ν루 μΌνκΈ° μ«λ€'λΌκ³ λκ»΄μ§κ³ , ν΄κ°λ₯Ό μΈ μ μμλ 근무μ€μ λ©μ μ λ₯Ό νλ©΄ μκ°μ΄ κΈλ°© κ°μ μ μ μκ² λ€.
λ¨, κΈ°μ μλ μΈμ λ μ΄λμ΄ λ©΄μ΄ μλ―μ΄, μκ°μ μμ²λκ² λΉ¨λ¦¬ 보λ΄λ λμ€ μμ¬μμ μμΉμλ λ©μμ§μ λ°λμ ν¨κ³Όλ₯Ό λνλΌμλ μλ€. (μ¦, μ΄λ΄λ 'μ€νλΌμΈμΌλ‘ 보μ'μ μ΄μ©νλλ‘ νμ)