게시글
질문&답변
2023.02.12
뒤집은 소수 / 런타임 에러 + 궁금증
저 또한 수강생이지만, 의견을 드리자면,코테에서 입력값의 맨 뒷값에 공백을 포함시키지 않는다는 제약을 반드시 가하는지는 모르겠습니다.만일 이것이 고민될 경우, trim을 통해 맨앞 맨 뒤의 공백을 제거해서 사용할 수도 있을것 같습니다. 또한 split은 지정한 구분자를 사용해서 분리를 시키기에, 공백이 포함될 경우 생각했던 길이와 다른 길이의 배열이 생성될 수 있습니다.예를 들어,"1(공백)2(공백)3(공백)4(공백)5(공백)" 를 공백을 기준으로 split한다면,["1", "2", "3", "4", "5"] 로 길이 5개의 배열이 만들어지나, "(공백)1(공백)2(공백)3(공백)4(공백)5" 를 공백을 기준으로 split한다면,["", "1", "2", "3", "4", "5"] 로 길이 6개를 가지는 배열이 생성됨을 확인하였습니다. 발생하신 문제 또한,처음 입력한 값의 맨 뒤에 공백이 포함될 경우,reverse 과정에서, 맨 뒤의 공백은 맨 앞의 공백을 가지는 문자열로 변환되고,이 맨앞의 공백에 의해, 생각했던 길이의 배열보다 1이 더 큰 배열이 생성되기 때문이 아닐까 합니다. (0번째 인덱스 값 : "")"" 와 같은 빈 문자열은, Integer.parse() 실행시 런타임 에러가 발생합니다. 해당 빈 문자열은 정수형 변환할 수 없기 때문입니다.아마도 발생하신 예외 또한, NumberFormatException이 발생하시지 않았나 싶습니다.
- 0
- 2
- 643
질문&답변
2023.02.12
큐 사용시 add(), remove()
저 또한 수강생이지만, 도움이 되셨으면 좋겠습니다. Queue의 구현체인, LinkedList의 offer 구현은 다음과 같습니다.public boolean offer(E e) { return add(e); }Queue의 구현체로 Linked List를 사용할 경우,LinkedList의 offer 메서드는 add함수를 실행하는 것이므로, offer대신 add를 사용해도 무방해 보입니다. remove 메서드의 경우, 인자를 전달하지 않을 경우에는 다음과 같이 구현되어 있습니다.public E remove() { return removeFirst(); }public E removeFirst() { final Node f = first; if (f == null) throw new NoSuchElementException(); return unlinkFirst(f); } poll 구현은 다음과 같습니다.public E poll() { final Node f = first; return (f == null) ? null : unlinkFirst(f); } remove 메서드와 poll메서드의 차이는, 만일 큐에 아무값이 없을 경우입니다.큐가 비어있을때,remove는 Exception을 발생시키지만, poll은 null을 반환합니다.
- 1
- 1
- 292
질문&답변
2023.02.10
01-01. 문자찾기에서 부호 >= 와 > 의 차이가 궁금합니다.
저도 수강생이지만 도움을 드리려 글을 쓰게 되었습니다. 문자열 s의 길이가 5라고 한다면,for 문에서,i=0; i 그리고 배열의 인덱스는 0에서 시작합니다.따라서, 문자열의 길이가 5 일지라도, 문자열의 맨 마지막 문자의 인덱스는 4가 됩니다. 문자열의 각 문자의 인덱스는 0,1,2,3,4 가 되기 때문입니다. 따라서, i 배열의 마지막 인덱스는 4인데, 5번째 인덱스를 찾게 되므로, 위와 같은 Exception이 발생합니다. 배열 인덱스 범위를 초과하였다는 오류입니다. 문자열의 길이와 배열의 인덱스 번호가 일치하는 것은 아닙니다.문자열의 길이는 글자 하나마다 한개 두개,,, 세서 총 갯수를 반환하지만,배열의 인덱스는 처음 시작위치를 0으로 두고 시작합니다. 따라서, 문자열의 맨 마지막 '인덱스 번호'는 문자열 크기보다 1 작습니다.
- 0
- 1
- 216