자료구조

배열과 리스트

배열과 리스트

  • 배열은 메모리의 연속 공간에 값이 패워져 있는 형태의 자료구조

  • 리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조

숫자의 합 구하기

Question - 11720

Code

import java.util.Scanner;

public class 숫자의합 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        String sNum = sc.next();
        char[] cNum = sNum.toCharArray();

        int sum = 0;

        for (int i = 0; i < N; i++) {
            sum += cNum[i] - '0';
        }

        System.out.print(sum);
    }
}

Insight

  • char를 int로 형변환하여 sum에 더해준다.

sum += cNum[i] - '0';
  • N 대신 cNum.length 도 가능하다.

for (int i = 0; i < cNum.length; i++) { ... }
  • 띄어쓰기 없이 String으로 가져온 연속된 숫자들을 char 배열로 바꿔준다.

String sNum = sc.next();
char[] cNum = sNum.toCharArray();
  • 만약 주어지는 값이 한 자리수가 아니라 두 자리수 라면 ??

Idea

  • 수학

  • 구현

  • 문자열

reference

평균 구하기

Question - 1546

Code

import java.util.Scanner;

public class N2_P1546_평균구하기 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        int A[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();

        }

        int max = A[0];
        long sum = 0;
        for (int i = 0; i < N; i++) {
            if (A[i] > max) max = A[i];
            sum += A[i];
        }

        System.out.print(sum * 100.0 / max / N);
    }
}

Insight

  • 사칙연산 형변환

System.out.print(sum * 100.0 / max / N);
  • 처음에 / 연산을 할 때 첫번째 처럼 계산했다가 몫이 0인 경우 최종값 다 0 들어갔다.

B[i] = (float) (A[i] / max * 100.0);
  • 소수점의 정확도 어디서 어떻게 올리는지 디버깅 해보자.

    • float 이랑 long 자리수는 똑같음 언제 반올림하는지 확인하자.

정확도
  • 정ㅘ 정ㅘ

public class N2_P1546_평균구하기 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int A[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();

        }

        int max = A[0];
        for (int i = 1; i < N; i++) {
            if (A[i] > max) max = A[i];
        }

        float B[] = new float[N];
        for (int i = 0; i < N; i++) {
            B[i] = (float) (A[i] * 100.0/ max);
            System.out.println(B[i]);
        }

        float sum = 0;
        for (int i = 0; i < N; i++) {
            sum += B[i];
        }

        System.out.println(sum);

        System.out.print(sum/(float)N);
    }
}

Idea

reference

Last updated