자바 ArrayList 원소 값 변경, 원소만 출력

리브리버·2022년 10월 28일
0

TIL

목록 보기
4/17
post-thumbnail

위 문제에서 2가지 어려움이 있었다.

  1. 인덱스에 있는 원소 값을 변경하기
  2. 원소만 출력하기

인덱스에 있는 원소 값을 변경하기

ArrayList 에서 원소를 가져오는 방법이 get과 indexOf 가 있다.

아래 예제코드를 보자

ArrayList<Integer> numLst = new ArrayList<>(count); // count 는 int 정수로 배열의 크기를 나타낸다.

for(int i=0; i<23; i++) {
		numLst.add(0);
}

numLst.get(5); //index 5 위치의 값을 얻고싶을 때
numLst.indexOf(5); //index 5 위치의 값을 얻고싶을 때

값을 변경할때는 set함수를 이용하는 방법도 있다

아래 예제를 보자


ArrayList<Integer> numLst = new ArrayList<>(count); // count 는 int 정수로 배열의 크기를 나타낸다.

for(int i=0; i<23; i++) {
		numLst.add(0);
}

numLst.set(5, 1); // index 5 위치의 값을 1로 변경, set(index, value) 형식

하지만 원하는 기능은 특정 인덱스가 선택될때 그 인덱스의 배열 값을 +1 씩 증가시키고 싶었다.

set으로는 value에 +1 연산식도 넣어보았지만 구현되지 못했다.

하지만 잘 생각해보니 tmp 변수를 선언해주고 거기에다가 원하는 연산을 해주고 다시 넣어주면 되는 일이었다..

tmp = 현재 배열의 값 → tmp +1 → 연산된 tmp 값 원하는 index 위치로 수정

아래 예제코드를 보자


ArrayList<Integer> numLst = new ArrayList<>(count); // count 는 int 정수로 배열의 크기를 나타낸다.

for(int i=0; i<23; i++) {
		numLst.add(0);
}

int tmp = numLst.get(5); // index 5위치의 값 tmp에 저장
tmp += 1; // 원하는 연산 수행
numLst.set(studentLst.get(i)-1, tmp); // 연산된 tmp 값 원하는 index 위치로 수정

리스트 원소만 출력하기

여러가지 방법이 있겠지만 아래의 방법을 사용해보았다.

for(int i: numLst){ // for each로 리스트 원소들을 하나씩 내보낸다
    System.out.print(i+" "); // 원소들을 하나씩 내보내며 줄바꿈 없이 진행한다
}

아래는 정답코드와 출력값을 나타내보았다.

import java.util.ArrayList;
import java.util.Scanner;

public class k1093 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int count = sc.nextInt();

        ArrayList<Integer> studentLst = new ArrayList<>(23);
        ArrayList<Integer> numLst = new ArrayList<>(count);




        for(int i=0; i<count; i++) {
            studentLst.add(sc.nextInt());
        }

        for(int i=0; i<23; i++) {
            numLst.add(0);
        }

        for(int i=0; i<count; i++) {
            int tmp = numLst.get(studentLst.get(i)-1);
            tmp += 1;
            numLst.set(studentLst.get(i)-1, tmp);
        }

        for(int i: numLst){
            System.out.print(i+" ");
        }
    }
}

0개의 댓글