스터디 11일차 : 코딩테스트(Lv.0) 풀기


11일차에는 조원분들과 페어 프로그래밍 방식으로 문제를 같이 풀었다. 한 사람이 코드를 짜고, 한 사람은 방향을 제시하고, 다른 한 명은 다른 방식을 시도해보는 식으로 해보았다. 이렇게 집단지성을 활용하니 풀이가 훨씬 빨라지고, 무엇보다 재미가 있었다.ㅎㅎ
다른 분들이 생각하는 방식을 엿볼 수 있고, 혼자 풀 때보다 다양한 풀이법을 고려해볼 수 있어 좋았다.😊

다만, 나중에 백지상태에서 혼자 다시 풀어보려하면 어떻게 풀었는지 생각이 잘 안 난다는 게 함정..

🍏 머쓱이보다 키 큰 사람

머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 리턴하기

class Solution {
    public int solution(int[] array, int height) {
        int answer = 0;
        for (int i : array) {
            if (i > height) {
                answer++;
            } 
        } 
        return answer;
    }
}
  • 전날 배운 for each문을 사용해보았는데, 인덱스를 알 필요가 없는 문제이다보니 for문보다는 for each문이 훨씬 간결한 느낌이다. 배운 걸 바로 써먹어본 우리~ 굿굿~

🍏 배열 두 배 만들기

정수 배열 numbers의 각 원소에 두배한 원소를 가진 배열을 리턴하기

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(int[] numbers) {
    List<Integer> doubleNum = new ArrayList<Integer>();

    for (int i : numbers) {
    doubleNum.add(i * 2);
    }

    return doubleNum.stream().mapToInt(i -> i).toArray();
    }
}
  • 이 문제도 전날 매니저님이 사용해보라고 알려주신 ArrayList를 활용하여 풀었다! 처음 써봐서 생성하는 법이나 int배열로 타입 변환하는 게 좀 헷갈렸는데 어찌어찌 잘 풀었다.
  • 특히 리스트 형태를 int 배열로 타입 변환하는 부분에서 한참 막혔었는데, 이유는 'doubleNum' 이 있는 자리가 변수 자리라는 걸 알아차리지 못해서였다..;
    • 구글링해서 찾은 예제에서 변수 이름이 list로 되어 있어서 메소드명의 일부인 줄 알았음...
    • 다행히 동찬님께서 변수라는 걸 캐치하셔서 고비를 잘 넘어갔다!👍
    • 그 전에도 intellJ에서 빨간 줄 띄워주며 변수가 어쩌고...라고 힌트를 주었는데 뭥미 하고 넘겼었다;; 앞으로 J님의 말씀을 새겨듣도록 해야겠음.
  • ArrayList의 add 메소드를 사용했다. 인자로 전달된 객체를 리스트에 추가하는 역할을 한다.

🍏 배열의 유사도

문자열 배열 s1과 s2가 가진 원소 중 같은 원소의 개수를 리턴하기

class Solution {
    public int solution(String[] s1, String[] s2) {
        int cnt = 0;
        for (int i=0; i < s1.length; i++) {
            for (int j=0; j < s2.length; j++) {
                if (s1[i].equals(s2[j]))
                    cnt++;
            }
        }
        return cnt;
    }
}
  • 이 문제를 같이 풀면서 나는 아직 이중 for문에 약하다는 걸 알았다. 조원분들이 방향을 제시해주셨는데, 이중 for문으로 했을 때 어떤 결과가 나올지에 대해 내 머릿속에서 그리는 데에는 시간이 좀 걸렸다.^^;
  • 첫번째 for문이 한번 돌 때 두번째 for문은 length만큼의 한 텀을 도는 것. 그렇다면 이중 for문은 굉장히 많이 돌겠군..
  • 알게 된 것 한가지 더! String 배열에서 같은 값을 확인할 때는 '=='가 아니라 반드시 equals라는 메서드를 사용해야한다.
    • equals 메서드는 대상의 내용 자체를 비교하고, 연산자 '=='는 대상의 주소값을 비교한다.
    • 그러므로 String 배열의 내용 자체를 비교하기 위한 위 문제의 경우 equals를 사용해야 한다.
    • 자바의 정석에서 봤던 기억이 얼핏..난다.



참고자료

ArrayList.add() 사용 방법

Integer ArrayList를 int 배열로 변환하기

문자열 비교 equals()와 '=='의 차이점

프로그래머스 코딩테스트 연습 입문

profile
게발로 개발하기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN