배열

- 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조

- 인덱스를 통해 참조

- 선언한 자료형의 값만 저장할 수 있음

 

특징

- 인덱스를 사용하여 값에 바로 접근 할 수 있음

- 새로운 값 삽입 삭제 하기 어렵다 . 값을 삽입하거나 삭제하려면 해다 인덱스 주변에 있는 값을 이동 시키는 과정이 필요함

- 배열의 크기는 선언할 때 지정할수 있고 변경할수 없음

 

리스트

- 값과 포인터를 묶은 노드(값,포인터를 쌍으로 갖는 기초 단위)라는 것을 포인터로 연결한 자료구조

 

특징

- 인덱스가 없으므로 값에 접근하려면 head 포인터부터 순서대로 접근해야한다. 고로 접근하는데 속도가 오래걸림

- 포인터로 연결되어 있으므로 데이터를 삽입하거나 삭제하는 연산속도가 빠름

- 선언할 때 크기는 지정 않아도 됨

- 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡함.

 

자바에서 Array, ArrayList, LinkedList

 

참고

https://velog.io/@letskuku/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Array-vs-ArrayList-vs-LinkedList

반응형

문제

https://www.acmicpc.net/problem/1546

슈도코드

String으로 받아옴 split 배열로 만들고 계산

가장 높은 점수를 찾아야함

모든 값을 /가장높은점수*100으로 계산하고

다 더해서 평균을 구한다.

나의 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{    
    
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int numCnt = Integer.parseInt(br.readLine());
    String scoreStr = String.valueOf(br.readLine());
    String[] scoreArr = scoreStr.split(" ");
    int maxScore = 0;

    for (int i = 0; i < numCnt; i++) {
      int score = Integer.parseInt(scoreArr[i]);
      if(maxScore < score ){
        maxScore = score;
      }
    }
    float newSum = 0;
    float avl = 0L;

    for (int i = 0; i < numCnt; i++) {      
      newSum += (Float.parseFloat(scoreArr[i])/maxScore * 100);
    }
    avl = newSum / numCnt;
    System.out.println(avl);
  } 
}

만난 에러

read로 했을 때 char로 읽어오기 때문에 3 -> 51

다른사람 풀이

import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
        int n = readInt();
        int maxScore = 0;
        int totalScore = 0;
        for (int i = 0; i < n; ++i) {
            int score = readInt();
            totalScore += score;
            maxScore = maxScore > score ? maxScore : score;
        }
        System.out.println(100.0d * totalScore / maxScore / n);
    }
    
    static int readInt() throws IOException {
        int retValue = 0;
        boolean negative = false;
        while (true) {
            int i = System.in.read();
            if (i == '\r') continue;
            if (i == ' ' || i == '\n') {
                break;
            }
            else {
                if (i == '-') negative = true;
                else {
                    retValue = retValue * 10 + i - '0';
                }
            }
        }
        return negative ? -1 * retValue : retValue;
    }      
}

배운 것

read 

readLine

https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html

반응형

'코딩 테스트' 카테고리의 다른 글

배열 vs 리스트  (0) 2024.05.07
[백준] 11720 숫자의 합  (0) 2024.05.05

문제 

https://www.acmicpc.net/problem/11720

슈도코드

첫번 째줄 숫자의 갯수 두번째 줄 숫자 N개

숫자 String 으로 받아와서 

하나씩 잘라주고 int로 변환해서 더해준다.

숫자 갯수만큼 for문 돌려 준다.

내 풀이

import java.util.Scanner;
public class Main {

  public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int numCnt = sc.nextInt();	//String allNum = sc.nextLine();으로 했다가 에러남;;        
        String allNum = sc.next();
        int result = 0;

        for(int i =0; i<numCnt; i++){
         // System.out.println(result);
          //System.out.println(allNum.substring(i,i+1));
          result += Integer.parseInt(allNum.substring(i,i+1));
        }

        System.out.println(result);

  }
}

 

배운 것

nextLine()

next() 차이

https://devlog-wjdrbs96.tistory.com/80

 

 

다른 사람 풀이와 비교하기

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		char[] numbers = br.readLine().toCharArray();
		int total = 0;
		
		for (int i = 0; i < N; i++) {
			total += Integer.parseInt(String.valueOf(numbers[i]));
		}
		System.out.println(total);
	}
}

https://juno-juno.tistory.com/99

반응형

'코딩 테스트' 카테고리의 다른 글

배열 vs 리스트  (0) 2024.05.07
[백준] 1545 평균 (+ 만난 에러 / 다른 사람 풀이 비교)  (0) 2024.05.07

+ Recent posts