관련 이론 및 문법

(String 클래스 참고)

http://kkikkodev.tistory.com/100


(String 클래스 VS StringBuilder 클래스 참고)

http://kkikkodev.tistory.com/102


문제 의도

주어진 소스코드의 3 라인에 넣었을 때, 4247 을 출력하는 보기를 2 개 고르는 문제입니다.


답안

B, E


풀이 방법

먼저, 보기 A 를 살펴보면, String 형 변수 s 에 "123456789" 를 가리키게 합니다. 그 다음 줄에서 s = (s - "123").replace(1, 3, "24") - "89"; 를 하는데, String 과 관련된 연산자 중에는 - 연산자가 없기 때문에 이는 답안 후보에서 제외합니다.


보기 B 를 살펴보면, StringBuffer 형 변수 s 에 "123456789" 값을 지니는 StringBuffer 객체를 만들어 가리키게 합니다. 그 다음 줄에서는, s.delete(0, 3).replace(1, 3, "24").delete(4, 6); 문장이 있는데, 먼저, s.delete(0, 3) 을 보면, 0 번째 ~ 2 번째 (3 - 1) 의 문자열을 삭제하는 것이니, "123456789" -> "456789" 가 됩니다. 그리고 이를 가지고, .replace(1, 3, "24") 를 하면, 1 번째 ~ 2 번째 (3 - 1) 의 문자열을 "24" 로 치환하라는 것이니, "456789" -> "424789" 가 됩니다. 마지막으로, 이를 가지고 .delete(4, 6); 을 하면, 4 번째 ~ 5 번째 (6 - 1) 의 문자열을 삭제하라는 것이니, "424789" -> "4247" 이 됩니다. 따라서 답안 후보가 됩니다.


보기 C 를 살펴보면, StringBuffer 형 변수 s 에 "123456789" 값을 지니는 StringBuffer 객체를 만들어 가리키게 합니다. 그 다음 줄에서는, s.substring(3, 6).delete(1, 3).insert(1, "24"); 문장이 있는데, 먼저, s.substring(3, 6) 을 보면, 3 번째 ~ 5 번째 (6 - 1) 의 문자열을 추출하는 것이니, "123456789" -> "123789" 가 됩니다. 이것은 String 형인데, 바로 그 뒤에 delete 메소드를 호출하고 있습니다. 하지만 String 클래스에는 delete 메소드가 없으므로 compile error 를 발생시킵니다. 따라서 답안 후보에서 제외합니다.


보기 D 를 살펴보면, StringBuilder 형 변수 s 에 "123456789" 값을 지니는 StringBuilder 객체를 만들어 가리키게 합니다. 그 다음 줄에서는, s.substring(3, 6).delete(1, 2).insert(1, "24"); 문장이 있는데, 먼저, s.substring(3, 6) 을 보면, 3 번째 ~ 5 번째 (6 - 1) 의 문자열을 추출하는 것이니, "123456789" -> "123789" 가 됩니다. 이것은 String 형인데, 바로 그 뒤에 delete 메소드를 호출하고 있습니다. 하지만 String 클래스에는 delete 메소드가 없으므로 compile error 를 발생시킵니다. 따라서 답안 후보에서 제외합니다.


보기 E 를 살펴보면, StringBuilder 형 변수 s 에 "123456789" 값을 지니는 StringBuilder 객체를 만들어 가리키게 합니다. 그 다음 줄에서는, s.delete(0, 3).delete(1, 3).delete(2, 5).insert(1, "24"); 문장이 있는데, 먼저, s.delete(0, 3) 을 보면, 0 번째 ~ 2 번째 (3 - 1) 의 문자열을 삭제하라는 것이니, "123456789" -> "456789" 가 됩니다. 그리고 이를 가지고, .delete(1, 3) 를 하면, 1 번째 ~ 2 번째 (3 - 1) 의 문자열을 삭제하는 것이니, "456789" -> "4789" 가 됩니다. 이를 가지고 .delete(2, 5); 을 하면, 2 번째 ~ 4 번째 (5 - 1) 의 문자열을 삭제하라는 것이니, "4789" -> "47" 이 됩니다. 마지막으로, 이를 가지고, .insert(1, "24"); 를 하면, 1 번째에 문자열 "24" 를 삽입하라는 것이니, "46" -> "4247" 이 됩니다. 따라서 답안 후보가 됩니다.


따라서 답안은 B 와 E 가 됩니다.


by kkikkodev 2015. 9. 10. 00:36