본문 바로가기

javascript/javascript 백준

[javascript] 백준4단계. 1차원 배열

백준 테스트 도전!

https://www.acmicpc.net/step

 

단계별로 풀어보기

단계별은 @jh05013님이 관리하고 계십니다. 단계제목설명정보총 문제내가 맞은 문제1입출력과 사칙연산입력, 출력과 사칙연산을 연습해 봅시다. Hello World!132if문if문을 사용해 봅시다.73for문for문을

www.acmicpc.net

위 사이트에서 4단계 1차원배열에 대해 풀어보자.

 

 

1) 최소, 최대(10818번)

   - 문제 : 첫째줄엔 N개의 정수, 둘째줄엔 n개의 정수를 공백으로 구분해 주어진다. 최솟값과 최댓값을 구하기

 


 

2) 최대값(2562번)

   - 문제 : 9개의 서로 다른 자연수가 주어질 때, 이들 중 최대값을 찾고 그 최대값이 몇번째 수인지 구하는 프로그램

              ㄴ 출력 : 첫째줄에 최댓값, 둘째줄에 최댓값이 몇번째 수인지 출력

sort를 이용해서 풀고싶지만 원본배열이 아예 오름차순으로 바뀌어버려서 인덱스를 구할수가없다 ㅠ

나중에 공부해서 다시 꼭 풀어보기!!

 

 

3) 숫자의 개수(2577번)

   - 문제 : 세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를

             구하는 프로그램. 

             ㄴ 입력: 첫째줄 A, 둘째줄 B, 셋째줄 C 입력됨

 

어떻게 접근해야 할까... 고민하다가 숫자 3개를 곱한값 하나하나를 배열의 요소로 넣어볼까 하다가 너무 길어질 것 같아

구글링해본 결과 split했을 때의 나눠지는 요소는 그 개수가 포함된 숫자+1이므로

string도 split해서 포함된 갯수를 구하는 글을 보고 이마를 탁!쳤다!

 


 

4) 나머지(3052번)

   - 문제 : 수 10개를 입력받은 뒤, 42로 나눈나머지를 구한다. 그 다음 서로 다른 값이 몇개 있는지 출력하는 프로그램~

 

1) set 사용:중복되지 않는 유일한 값들의 집합. 중복요소를 제거할땐 set을 사용하자.

2) filter 사용:요소를 순회하면서, 해당요소인 거만 남기고 다 제거한다. 

3) indexOf 사용: 인수로 전달된 요소를 검색하여 그 숫자의 인덱스를 반환한다. 

    * 배열에 요소가 없다면, -1을 반환한다. 여러개가 있따면 첫번째로 검색된 요소의 인덱스만 반환

   -> 배열에 요소가 없을경우(indexOf===-1), 새배열에 하나씩 추가한다.(중복인 경우엔 배열에 추가되지 않음)

 

5) 평균(1546번)

   - 문제 : 철째줄:시험 본 과목의 개수 n, 둘째줄 : 세준이의 현재성적

   - 기말고사 망친 세준이가 점수조작하게 되는데..... 자기 점수 중 최대값을 골라 (m) 모든 점수를 점수/m*100으로 고침

      새로운 평균을 구하는 프로그램?

*오류난 이유 1. split(\n)으로 되어있었음    '\n'!!!!!

                    2. 최대값은 내림차순으로 정렬 후, index[0]으로 하는게 코드가 더 간결! 오름차순으로 하면 test.length-1이럼 ..;


 

6) OX퀴즈(8958번)

   - 문제 : 철째줄:테스트케이스의 개수 n, 둘째줄 : 한줄씩 테스트케이스

   - OOXXOXXOOO -> 1+2+0+0+1+0+0+1+2+3=10점

  1. 이중for문

 

 

 

 

 

 

 

 

 

 

 

 

=> 각 test들은 input이란 배열 1~5에 담겨있다. 여기에 for문을 돌려 각 글자가 O일 경우엔 점수가 1점올라가고, bonus점수도 1 증가한다. x를 만나면 bonus점수는 초기화된다.

 

*오류난 이유 1. 첫번째 for문 안에서 bouns, sum=0 초기화를 해주어야 한다. 밖에서 했을 경우엔, 숫자가 엄청 커짐 초기화안돼서

                    2. 같은이유로 console.log(sum)도 첫번째 for문에 작성해야함

            

2. forEach 이용

*오류난 이유 1. 마지막에 console.log를 다음줄에 적으면 오류가 안나는데 붙여서쓰려니 오류남.. 저럴땐 ;세미콜론 !

 


7) 평균은 넘겠지(4344번)

   - 문제 : 철째줄:테스트케이스의 개수 c, 둘째줄 : 한줄씩 테스트케이스마다 학생의 수 n이 첫번째 수, 이어서 점수가 나열

 

1. 3중 for문 사용...

 

 2. forEach 사용.. 위코드에서 세번째 for만 forEach로 바꿨는데 오류가 나서...

    test.shift() 메소드로 첫번째 학생수를 분리하여 people에 할당하고 index1부터 다시 test에 담긴다.

    이렇게 수정하고 나니 forEach를 써도 오류가 안난다. 배열에 첫번째 수가 학생이어도 평균점수보단 당연히 낮을 거라 생각해서 

   무시했는데, 학생수가 7명이고 모든 점수가 1점이면 카운트가 되니 shift()로 빼는게 맞구나..... !

3. reduce 사용...

reduce는 처음 사용해보는데 공부좀 해야겠다. reduce를 잘만사용하면 sum/forEach/map/filter를 안써도 되겠다.

4. filter 사용

여기 filter함수에서 (v=>v>result)   = (v=>{return v>result}) 와 동일하다.

v=>() 여기서 괄호안의 값은 return이 된다.

{}중괄호를 쓰고싶으면 return이라 명시가 필요하다. 화살표함수도 너무 어렵다...ㅜㅠ

 

 

 

[reduce 참고페이지]

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org