오늘은 하루종일 페어프로그래밍 활동을 진행하였다. 어제 학습한 조건문과 반복문 문제을 페어분과 풀어보았다. 여러 문제를 풀어본 적이 있어서 문제 푸는데에는 어렵지 않았지만 초반에는 내가 푼 방법을 페어분께 설명해주는 부분에서 내가 이해하고 있는 부분을 잘 전달해주지 못한 거 같다. 하지만 점점 문제를 풀고 풀이를 설명하는 과정에서 의사코드를 작성해서 설명해드리니 초반에 설명한 것 보다는 생각이 잘 전달된 것같다! 설명하면서 한번 더 문제를 파악하고 그에 맞는 코드를 설명해드리니 개념이 잘 정리된 거 같고 다음에 비슷한 문제를 풀게 된다면 망설임 없이 풀 수 있을 것이라는 자신감도 생겼다. 오늘은 코플릿 문제 중 헷갈려서 넘어갔다가 다시 풀어본 문제를 위주로 블로그를 작성해 볼 것이다.
조건문
addOneSecond
문제
시, 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메시지로 리턴해야 합니다.
입력
인자 1 : hour
- number 타입의 정수 (0 <= hour && hour < 24)
인자 2 : minute
- number 타입의 정수 (0 <= minute && minute < 60)
인자 3 : second
- number 타입의 정수 (0 <= second && second < 60)
출력
- string 타입을 리턴해야 합니다.
- 1초 뒤에 {hour}시 {minute}분 {second}초 입니다 형식으로 리턴해야 합니다.
입출력 예시
let output = addOneSecond(14, 17, 59);
console.log(output); // --> '1초 뒤에 14시 18분 0초 입니다'
output = addOneSecond(1, 59, 59);
console.log(output); // --> '1초 뒤에 2시 0분 0초 입니다'
output = addOneSecond(3, 24, 29);
console.log(output); // --> '1초 뒤에 3시 24분 30초가 입니다'
output = addOneSecond(23, 59, 59);
console.log(output); // --> '1초 뒤에 0시 0분 0초 입니다'
풀이
function addOneSecond(hour, minute, second) {
// TODO: 여기에 코드를 작성합니다.
second = second + 1;
if(hour >= 23 && second >= 59 && minute >= 59){
hour = 0;
second = 0;
minute = 0;
}
else if(second >= 59 && minute >= 59){
hour = hour + 1;
second = 0;
minute = 0;
}
else if(second >= 59){
minute = minute + 1;
second = 0;
}else if(minute >= 59){
hour = hour + 1;
minute = 0;
}
return `1초 뒤에 ${hour}시 ${minute}분 ${second}초 입니다`;
}
// 시, 분, 초 1초를 더한 값
// 출력 : 1초 뒤에 {hour}시 {minute}분 {second}초 입니다
// 59초 일 경우 분에 1 들어감
// 59분 일 경우 시에 1 들어감
// 입력 : 시 , 분 ,초
// 출력 : 1초 뒤에 {hour}시 {minute}분 {second}초 입니다 -> second+1
이 문제는 코드는 맞았지만 if문의 순서 문제로 답이 잘 나오지 않았다. 처음 코드를 작성했을 때 second 와 minute 먼저 작성했는데 만약 second 와 minute 의 조건이 참이되어버리면 뒤에 조건이 실행이 안되어 조건 1.세가지 경우를 비교할 때, 2.두가지 경우를 비교할 때 , 3.한가지 경우를 비교할 때로 순서를 바꾸어 코드를 작성하니 코드가 잘 돌아갔다 ! 코드는 순차적으로 실행되는데 조건을 두가지를 만족해버리면 앞에서 만족한 조건을 실행하는 것 같았다.
예시로 돌려본 코드
let num = 81;
function hello(number){
if(number>80){
console.log('80보다 큼');
}
else if(number>70){
console.log('70보다 큼');
}
else
console.log('그 외');
}
hello(num); // 80보다 큼 출력
이렇게 if문과 elseif 문 두가지 조건을 다 만족하지만 첫번째로 만족했던 코드의 실행결과가 출력되었다.
반복문
replaceAll
문제
문자열과 두 개의 문자(from, to)를 입력받아, 문자열에 등장하는 특정 문자(from)가 다른 문자(to)로 바뀐 문자열을 리턴해야 합니다.
입력
인자 1 : str
- string 타입의 문자열
인자 2 : from
- string 타입의 문자
- from.length는 1
인자 3 : to
- string 타입의 문자
- to.length는 1
출력
- string 타입을 리턴해야 합니다.
입출력 예시
1
2
let output = replaceAll('loop', 'o', 'e');
console.log(output); // --> 'leep'
풀이
function replaceAll(str, from, to) {
// TODO: 여기에 코드를 작성합니다.
let temp = '';
for(let i =0; i<str.length;i++){
if(str[i]===from){
temp+=to;
}
else{
temp+=str[i];
}
}
return temp ;
}
// loop str i=0 i<4 i++
//loop 인덱스가 0인 문자열이 'o' 일때 to -> 'e'
이 문제 또한 간단하게 str[i] 값을 to로 할당해주면 되지 않을까 ? 했는데 결과값으로는 계속 str 에 저장된 값이 출력되었다. 그래서 빈 문자열을 추가해주고 같을 땐 to로 그렇지 않을 땐 기본 str의 값으로 넣어주게 코드를 작성해보았다. 자바스크립트에서는 문자열은 원시값으로 참조는 가능하나 변경이 불가능하다. 이 점을 생각지 못하고있었는데 문제를 풀면서 알수있었다 .
'코드스테이츠44기 프론트엔드' 카테고리의 다른 글
[코드스테이츠 44기 프론트엔드 10일차 회고록] 우분투 설치 및 CLI 명령 정리 (0) | 2023.02.25 |
---|---|
[코드스테이츠 44기 프론트엔드 9일차 회고록] 계산기 구현하기-1 (0) | 2023.02.23 |
[코드스테이츠 44기 프론트엔드 7일차 회고록] 조건문,반복문,함수에 대해 (0) | 2023.02.21 |
[코드스테이츠 44기 프론트엔드 6일차 회고록] javascript 타입과 변수 (0) | 2023.02.20 |
[코드스테이츠 44기 프론트엔드 5일차 회고록] 계산기 목업 만들기 (0) | 2023.02.17 |