Open jaeyyyyy opened 11 months ago
todo_list
와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished
가 매개변수로 주어질 때, todo_list
에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.todo_list
의 길이 1 ≤ 100todo_list
의 원소의 길이 ≤ 20todo_list
의 원소는 영소문자로만 이루어져 있습니다.todo_list
의 원소는 모두 서로 다릅니다.finished[i]
는 true 또는 false이고 true는 todo_list[i]
를 마쳤음을, false는 아직 마치지 못했음을 나타냅니다.todo_list | finished | result |
---|---|---|
["problemsolving", "practiceguitar", "swim", "studygraph"] | [true, false, true, false] | ["practiceguitar", "studygraph"] |
예제 1번의 todo_list
중에서 "problemsolving"과 "swim"은 마쳤고, "practiceguitar"와 "studygraph"는 아직 마치지 못했으므로 todo_list
에서 나온 순서대로 담은 문자열 배열 ["practiceguitar", "studygraph"]를 return 합니다.
todo_list
와 finished
의 길이가 동일하다고 가정하고 코드를 작성했다.
import java.util.ArrayList;
class Solution {
public String[] solution(String[] todo_list, boolean[] finished) {
ArrayList<String> result = new ArrayList <>();
for(int i = 0; i < todo_list.length; i++){
if(finished[i] == false) { // 값이 false이면
result.add(todo_list[i]); // todo_list[i]를 result에 추가한다.
}
}
String[] answer = new String[result.size()]; // result의 사이즈만큼 answer 배열을 만듦
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
finished
에 false인 값이 총 몇 개인지 모르니..편하게 값 추가하려고 ArrayList를 사용했다.
return result.toArray(new String[result.size()]);
메서드 사용하면 이렇게 짧게 작성도 되는데, for문이 기본이되니까 for문으로 작성했었다.
class Solution {
public String[] solution(String[] todo_list, boolean[] finished) {
String[] answer = {};
String[] temp = new String[todo_list.length]; // todo_list 길이만큼 임시 배열 만들기
int count = 0; // false인 갯수를 count
for(int i=0; i<todo_list.length; i++){
if(!finished[i]){
temp[count++] = todo_list[i]; // 임시배열에 false인 값 추가하기
}
}
answer = new String[count]; // 임시배열의 유효한 값만 answer에 복사하기
for(int i=0; i < count; i++){
answer[i] = temp[i];
}
return answer;
}
}
numbers
와 정수 n이 매개변수로 주어집니다. numbers
의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.numbers
의 길이 ≤ 100numbers
의 원소 ≤ 100n
< numbers
의 모든 원소의 합numbers | n | result |
---|---|---|
[34, 5, 71, 29, 100, 34] | 123 | 139 |
[58, 44, 27, 10, 100] | 139 | 239 |
입출력 예 1
numbers
를 문제 설명대로 더해가는 과정을 나타내면 다음의 표와 같습니다.i | numbers[i] | sum |
---|---|---|
0 | ||
0 | 34 | 34 |
1 | 5 | 39 |
2 | 71 | 110 |
3 | 29 | 139 |
n
값인 123보다 크므로 139를 return 합니다.예제 2번의 numbers
의 마지막 원소 전까지의 원소를 sum에 더하면 139입니다. 139는 n
값인 139보다 크지 않고 마지막 원소인 100을 더하면 139보다 커지므로 239를 return 합니다.
반복문을 사용해서 계속 더하게 한 다음, 조건을 만족하면 반복을 빠져나오게 하면 되는 간단한 문제다.
class Solution {
public int solution(int[] numbers, int n) {
int answer = 0;
for(int i = 0; i < numbers.length; i++) {
answer += numbers[i];
if(answer > n) {
break;
}
}
return answer;
}
}
정말 간단한 문제인데 굳이 기록을 한 이유는 다른 사람의 풀이를 보면서 내가 for문을 제대로 활용을 못 하고 있었던 걸 깨달았기 때문..
for (초기치; 조건문; 증가치) {
...
}
for문은 위의 코드처럼 이루어진다. 보통 초기값 int i = a를 넣고, i가 b보다 작은(작거나 같은..등) 동안, i를 c만큼 증감하는데 조건문에 꼭 i에 대한 조건문이 들어가지 않아도 된다는 것.
class Solution {
public int solution(int[] numbers, int n) {
int answer = 0;
for(int i = 0; answer <= n; i++) {
answer += numbers[i];
}
return answer;
}
}
그러니까 이런 코드도 가능하다는 얘기 분명히 이렇게 푼 적은 있었던 것 같은데 막상 사용하려고 하면 생각이 안 나서 먼 길 돌아가는 느낌이랄까.. 조건문을 이렇게 짜게 되면 굳이 반복문을 탈출할 필요가 없어진다.
생성자와 this, this()에 대해 정리했습니다. 확실히 이해하려면 계속 정리해봐야 할듯 합니다..^^>;; https://velog.io/@peace_e/Java-%EC%83%9D%EC%84%B1%EC%9E%90%EC%99%80-thisthis
문제1
문제
5명씩(https://school.programmers.co.kr/learn/courses/30/lessons/181886)
최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트
names
가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.제한사항
names
의 길이 ≤ 30names
의 원소의 길이 ≤ 10names
의 원소는 영어 알파벳 소문자로만 이루어져 있습니다.입출력 예
앞에서부터 5명씩 두 그룹으로 묶을 수 있습니다. ["nami", "ahri", "jayce", "garen", "ivern"], ["vex", "jinx"] 이 두 그룹에서 가장 앞에 서있는 사람들의 이름을 담은 리스트인 ["nami", "vex"]를 return합니다.
문제 풀이
마지막 그룹이 5명이 되지 않아도 가장 앞에 있는 사람의 이름을 포함한다는 점이 중요하다.
name
의 원소가 5의 배수인 경우와, 5의 배수가 아닌 경우에서 answer 배열의 길이가 달라진다. ArrayList를 사용할 거라면 배열의 길이를 설정하지 않아도 되지만 프레임워크를 쓰지 않으면서 코드를 작성해보려고 했다.코드 전체는 아래와 같다.
회고
경우에 따라 배열 size의 값이 달라진다면 어떻게 코드로 구현을 해야하는지 고민을 했던 문제.
~~라면 1만 더하면 되니까 이렇게 작성하는 게 더 간결하고 알아보기 쉬워보인다.
다른 사람의 코드를 참고했더니 삼항연산자로 배열의 선언과 동시에 배열의 크기를 초기화할 수도 있었다. 참고하려고 적어둔다. []안에 삼항연산자를 넣으면 된다.