알고리즘 Step을 공부하기 전까진 솔직히 알고리즘이라는 말 자체로 쫄았었다;;;
근데 Level 1이라서 쉬운 것도 있겠지만 생각보다 어렵지 않고 로직을 생각하면서 가능한 많은 경우의 수에 실행되도록 최적화시키는 과정이 재미...가 있다. ㅎㅎㅎ 어려운 문제를 만나면 어떻게 될지 모르겠다. ^^
- 김서방 찾기
- 문제 설명 : String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
- 제한 조건 :
1. seoul은 길이 1 이상, 1000 이하인 배열입니다.
2. seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
3. "Kim"은 반드시 seoul 안에 포함되어 있습니다.
- 입출력 예
seoul | return |
["Jane", "Kim"] | "김서방은 1에 있다' |
- 나의 풀이
function solution(seoul) {
for (let i = 0; i < seoul.length; i++) {
var name = seoul[i];
if (name === 'Kim') {
return '김서방은 ' + i + '에 있다';
}
}
}
알고리즘 첫 문제라서 조금 헤맸다. 사실... 인터넷에 검색해서 풀이를 찾아봤다. 아예 이 프로그래머스 문제 풀이가 어떻게 작동하는지 몰라 감을 잡히는 데에 좀 오래 걸렸다.
indexOf로 쉽게 풀 수도 있고 위처럼 for문을 사용해서 문제를 풀 수도 있다.
전체를 샅샅히 뒤져본다고 생각해보자. 처음부터 끝까지 하나하나 다 찾을거라고 생각해보면 for문을 이용하면 된다.
for문이 seoul이라는 배열의 크기만큼 반복되도록 length를 이용했다.
이 때 if문을 넣어 seoul의 i번째 index의 값이 'Kim'이랑 같을 때만 return문으로 답을 반환하도록 했다.
- 가운데 글자 가져오기
- 문제 설명 : 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
- 제한 조건 : s는 길이가 1 이상, 100이하인 string입니다.
- 입출력 예
s | return |
"abcde" | "c" |
"qwer" | "we" |
- 나의 풀이
function solution(s) {
var rest = s.length%2;
if (rest === 1) {
var center = s.length/2 - 0.5;
return s[center];
} else if (rest === 0) {
var center = s.length/2;
return s.slice(center - 1, center + 1);
}
}
가장 많은 시간을 쓴 것 같다. 대략 1시간 정도?
짝수일 때 2개를 반환한다고 생각해서 오래 걸렸다. 막상 2개를 반환하니 틀렸다고 하더라. s = 'qwer'일 때 'w', 'e'를 반환하는 것이 아니라 'we'를 반환하는 로직을 짰어야 됐기 때문이다. 2개를 반환하는 것이 아니라 2개를 붙여서 반환해야 한다.
이러면 오히려 쉬워진다. slice로 양 옆을 잘라주면 된다. 참고로 slice(a, b)는 a부터 b 바로 앞까지만의 문자열을 반환해준다. b는 포함 안된다는 것을 주의해야 한다.
혹은 문자열끼리 더했을 때는 단순히 붙여진다는 것을 이용하면 다음과 같이 해도 된다.
function solution(s) {
var rest = s.length%2;
if (rest === 1) {
var center = s.length/2 - 0.5;
return s[center];
} else if (rest === 0) {
var center = s.length/2;
return s[center - 1] + s[center];
}
}
- 수박수박수박수박수박수?
- 문제 설명 : 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
- 제한 조건 : n은 길이 10,000이하인 자연수입니다.
- 입출력 예
n | return |
3 | '수박수' |
4 | '수박수박수' |
- 나의 풀이
function solution(n) {
var rest = n%2;
if (rest === 0) {
return '수박'.repeat(n/2);
} else if (rest === 1) {
return '수박'.repeat(n/2 - 0.5) + '수';
}
}
일단 n이 10,000 이하의 자연수로 주어지긴 하지만 짝수인지 홀수인지 알 수 없다.
그러므로 나머지가 0이라면 n은 짝수이다.
짝수일 때는 단순하게 '수박'을 n/2만큼 repeat하면 된다.(repeat은 문자열을 반복해서 붙여지도록 해준다)
나머지가 1이라면 n은 홀수이다.
홀수일 때는 수박이 n/2 - 0.5번만큼(ex. n=5일 때, 5/2 - 0.5 = 2번) repeat되게 하고 마지막에 나머지 1만큼인 '수'를 붙여주면 된다.(문자열에서 +는 더한다는 느낌보다 단순히 문자열끼리 붙인다는 느낌이다)
'프로그래밍 > 바닐라코딩_Prep Guide' 카테고리의 다른 글
Step 4. Interacting with Webpages(2) (0) | 2021.12.16 |
---|---|
Step 4. Interacting with Webpages(1) (0) | 2021.12.13 |
Step 2. JavaScript(9) - Object, 객체 (0) | 2021.11.29 |
Step 2. JavaScript(8) - Arrays, 배열 (0) | 2021.11.28 |
Step 2. JavaScript(7) - Function, 함수 (0) | 2021.11.28 |