목록백준4단계 (9)
먹었으면 뇌를 쓰자

문제 잘못된 코드 이번엔 진짜 열심히 풀어봤는데... 틀려서 너무 아쉽다. 정답 점수 배열 score 뒤에 세번째 for문에 삽입될 if문에서 써야 하므로 병렬적인 두번째 for문이 아닌, 안고 있는 첫번째 for문에 위치시켰다. if문은 세번째 for문 안으로 이전에는 if문이 두번째 for문 안에 있었다. 그러다보니 최종 avg가 나왔을때, 그 평균을 기준으로 count++ 인데 avg가 최종까지 반복되는 작업 과정에서 count++을 할 수 없게 된다. 그래서 두번째 for문에서 최종 avg 를 다 구해놓고, 세번째 for문을 돌려서 배열 값과 최종 avg를 비교해 count++한다. 참고 - per 변수 삭제 (count/num)*100 으로 비율을 구하는 건 출력에서 바로 하기로 했다. 참고 -..

문제 정답 내가 생각했을 때는 이 문제를 풀면서 중요한 지점 3가지를 처리하는 게 중요하다. charAt() 로직을 처음 구상할 때 공백이나 줄바꿈이 없는 입력값에서 O와 X를 어떻게 구분할지 알 수 없었다. 이럴 때 charAt() 메소드를 쓰면 된다. 문자열에서 문자의 순서를 인식하여 반환하는 메소드이다. String st = "안녕하세요" 인 경우, charAt(1)은 '녕'이 된다. 점수와 총 점수 처음에는 총 점수 sum만 생각했는데, O면 +1, X면 0(초기화)을 담는 점수 count 변수도 필요하다. sum += count 가 된다. for문과 if문 사용 첫번째 for문은 OOXXOXXO 와 같이 정답과 오답 문자열을 받는다. 두번째 for문은 문자열을 한 문자씩 읽어나간다. 여기서 if..

문제 정답 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) ..

문제 잘못된 코드 이번 로직은 꽤 잘 짰다고 생각했는데... 바로 틀렸습니다!!! 정답 일단 종전에 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단계 배열도 앞으로 열심히 해보자. 익숙해지면 된다.