목록전체보기 (101)
먹었으면 뇌를 쓰자

객체 지향 프로그래밍(OOP)의 가장 큰 특징은 '객체 무결성'을 지키는 것이다. 간단하게 말하면 교실에서 싸움이 일어났을 때, "우리 반 빼고 나가!!!!" 하는 것이다. 그래서 변수를 선언할 때도 private을 지정해줘서 다른 클래스에서의 접근을 막는다. 하지만 살다보면 다른 클래스에서 우리 클래스 친구를 부를 때가 있다. setter는 다른 클래스에서 우리 클래스 친구에 접근할 수 있게 한다. getter는 다른 클래스에서 우리 클래스 친구를 직접 데려갈 수 있도록 한다. //Person.class와 Address.class가 @OneToMany로 매핑된 상황. //Person.class는 (mapped by "person"), addresses 인스턴스. //각 클래스 변수들에 getter an..

문제 정답 4단계에서 거의 매번 틀리고 있어서 오답 코드를 보면 너무 우울해진다. 우울할 일까지는 아니지만 맞히고 싶은 열망이 커서 그런 것 같다. 정답 로직만 정리해보자. 중요한 점은 세 가지이다. 1. StringTokenizer -> for문 안에 넣은 코드가 틀렸었다. 내가 왜 StringTokenizer를 for문 안에 넣었을까 생각해봤다. 3단계 A+B-7 문제에서 for문 안에 넣었던 경험 때문에 그런 것 같다. (https://eat-then-brain.tistory.com/49) -> A+B-7 문제는 입력 값 자체가 여러 번 들어왔기 때문에 토큰화도 여러 번 했어야 했다. 그런데 이번 문제는 입력 값은 한 번만 들어오니까 토큰화를 반복하지 않는다. 2. (arr [ i ] / max) ..

요즘 김성렬 교수님의 JPA 강의에 푹 빠져있다. 교수님께서 강의를 하시며 '헬퍼 메소드'를 자주 언급하시는데, 어떤 개념인지 잘 이해가 안 갔다. 자바 개념의 명칭은 직관적인 것들이 많다. Helper method 니까 뭔가 도와주는 메소드구나 라고 두루뭉술하게 넘어가다보니 한계가 와서 Nathan Schutz 라는 유튜버의 짧은 강의를 들어보았다. Helper method a method helping another method inside of a class and it can only be accessed from inside the class it is in 헬퍼 메소드는 자기 클래스 안의 다른 메소드를 도와주는 기능을 하며, 자기 클래스에서만 호출 가능하다. 일반 메소드와 헬퍼 메소드의 가장 ..

문제 잘못된 코드 이번 로직은 꽤 잘 짰다고 생각했는데... 바로 틀렸습니다!!! 정답 일단 종전에 for문을 2개 쓰던 걸 1개로 압축했다. 내가 잘못 쓴 코드는... 기본적으로 배열의 첫 번째 값을 서로 다른 값에 포함시키기 위해 num에 1개를 넣어놓고, 첫 번째 값과의 비교부터 출발, 총 9번의 비교를 반복하도록 했다. 최종적으로 rest[8]과 rest[9]까지 비교해서, 다를 때마다 num을 1씩 증가시켰다. int num =1; for(int k=0;k

문제 잘못된 코드 힘들었다... 전체 합, 배열 합, 빠진 수의 합, 전체 곱, 배열 곱, 빠진 수의 곱에서 규칙을 찾아서 로직을 짜보려고 노력했는데 잘 안됐다. 결국 방정식의 해까지 구해야 하는 문제가 생겼다. 점점 잘못되어감을 느끼고 그만뒀다. 정답 (*boolean) 로직은 다음과 같다. 1. boolean 데이터 타입 배열을 만든다. 0번부터 시작하므로 크기는 30+1=[31]이다. 2. 첫번째 for문 - 제출한 번호는 true로 배열에 저장한다. 3. 두번째 for문 - 제출하지 않은 번호는 자동으로 false가 되고, 이를 출력한다. 로직은 간단한데 수식 적는 게 좀 까다로워서 주석을 달아봤다. + 풀이 추가 BufferedWriter를 썼다.

문제 잘못된 코드(*런타임 에러 ArrayIndexOutOfBounds) 로직의 큰 줄기는 괜찮았지만 ... 1) int max = arr [0] 뒤에서 자세히 수정한다. 2) for문 조건절 인덱스를 0번째부터 찾으면 +1 처리를 해야 하니까 maxIndex를 아예 1부터 선언하고, for문 조건절도 int j=1로 해버렸다. 그러니까 if절에서 두 번째 값부터 돌리게 되는 불상사가 일어났다! 3) bw.write() 개행 처리 BufferedWriter는 개행 처리 안 된다 명심하자... 정답 2)와 3)은 무사히 수정을 완료했고, 1)의 경우 이전 문제였던 최대 최소처럼 int max = arr [0] 으로 처리하면? int maxIndex 에서 오류가 발생한다. 가령 {5,2,3,4}와 같은 배열..

문제 잘못된 코드 1) 배열을 먼저 만들고 2) for문으로 최댓값과 최솟값을 찾으려 했다 그런데 틀렸습니다... 정답 다른 분들의 알고리즘과 비교해봐도 틀린 부분이 없었다 그래서 혹시나 하는 마음에 print를 println으로 바꿨더니 성공함 (어이x) 결과가 한 줄에 출력되길래 나름 댁알이 쓴다고 print로 처리했는데 지금 와 생각해보니 띄어쓰기가 안되서 틀렸던 것 같다. 아침이라...댁알이가 살짝 젤리화됐나보다. + 풀이 추가 (* String.valueOf / Integer.toString ) BufferedReader와 BufferedWriter를 이용해 풀어보고 싶었다. BufferedWriter 때문에 마지막 형 변환이 중요한데 처음에는 형 변환을 아예 안해서 NullPointer 런타임..

문제 정답 어제 푼 첫 번째 문제를 복습하고 로직을 생각하면서 짰다 이 문제에서 중요한 부분은 '배열 값이 정수 a보다 작을 때' if문을 이용해 sysout으로 바로 출력하면 되는 간단한 로직이다. (+풀이 추가) BufferedReader + Scanner를 이용해봤다. 이 경우는 n과 x를 받고 나서 StringTokenizer를 한 번 더 실행해 다음 줄로 넘어가야 정답. 저 한 줄을 넣지 않으면 틀려버린다. BufferedReader + BufferedWriter를 이용해봤다. .flush()와 .close()를 깜빡하고 해주지 않았더니 틀렸습니다!!! 조심합시다.

문제 잘못된 코드(*런타임 에러) 배열은 생활코딩 반복문 하면서 아이스크림 겉핥기로 살짝 담가봤다. 제로베이스 상태이므로 구글링으로 코드를 조합해봤다. 런타임 에러가 뜬 걸 보니 for문에서 문제가 있는 것 같은데... 정답(*배열 주머니를 만들자) for문만 문제가 아니라 전반적으로 알고리즘이 틀려먹었다^^ 배열 문제이지만, 조건문과 반복문 로직이 중요한 것 같다. ★ 배열의 핵심은 배열 주머니를 만드는 것이다. (int [ ] numbers = new int [n]) ★ 이 문제처럼 입력 값으로 배열 주머니를 채운다면 for문을 써준다. (numbers [i] = sc.nextInt();) 4단계 배열도 앞으로 열심히 해보자. 익숙해지면 된다.

문제 잘못된 코드 내가 생각한 풀이과정은 다음과 같다. 1) 입력 값이 10 미만일 경우 01, 02 형식으로 바꿔야 한다. -> 구글링을 통해서 string.format() 메소드를 알아냈다. 앞에 0을 채워서 총 몇 자리로 나타낼지 정하면 된다. 이 문제는 2자리로 채워야하므로 "%02d"이다. 2) input 십의 자리 수+일의 자리 수 연산을 수행한 다음, 일의 자리 수+연산 결과 일의 자리 수를 "붙여야 한다." -> input/10, input%10로 십의 자리 수와 일의 자리 수를 분리했다. -> 그런데 입력 값이 10 미만인 변수 s는, 가령 01처럼 input/10을 하면 연산이 불가하다. -> 그리고 수를 "붙여야 하는" 개념을 어떻게 구현할지 모르겠다. 3) "붙여진" 수가 원래의 i..