자료구조알고리즘/코드스테이츠 Coplit (15) 썸네일형 리스트형 18_numberSearch [ 문제 ] 문제를 천천히 읽어보자. 문자열을 입력받는데 그 안에 숫자가 포함되어있다. 그 숫자를 모두 찾아 더한 뒤, 그 값을 '숫자와 공백을 제외한' 나머지 문자열의 길이로 나눈 값을 정수로 반올림하여 반환하는 문제이다. 입출력 예시를 보자. 'Hello6 '이라는 문자열을 입력받았으면 여기서 숫자는 '6'이다. 6을 '숫자와 공백을 제외한' 나머지 문자열의 길이인 5로 나누면 1.2이다. 이 값을 반올림하면 1이라는 값이 나온다. [ 풀이 ] 나의 로직은 다음과 같다. 1/ 반복문을 이용해 문자열에서 숫자를 모두 찾아 더한다. 2/ 공백, 숫자가 아니면 문자열이면 그 수를 더한다. 3/ 숫자의 합, 문자열길이를 구하면 숫자의 합을 문자열 길이로 나누어서 반올림한다. function numberSea.. 16_isIsogram [ 문제 ] 이해하기 쉬운 문제이다. 알파벳을 한번씩만 사용하여 만든 단어(아이소그램)일 경우 true, 아니라면 false를 반환시키는 문제이다. 여기서 주의사항은, 빈 문자열을 입력받을 경우 true를 리턴, 그리고 대소문자는 구별하지 않는다. [ 풀이 ] 나의 로직은 다음과 같다. 1/ 대소문자를 구별하지 않게 하기위해, 입력받은 문자열을 소문자 또는 대문자로 통일시킨다. 2/ 이중 반복문을 이용하여 똑같은 알파벳이 있으면 false를 반환시키고, 반복문이 끝나도록 같은 알파벳이 있지 않으면 true를 반환시킨다. function isIsogram(str) { let capital = str.toUpperCase(); //먼저 입력받은 str을 대문자로 통일시킨다. for(let i = 0; i <.. 15_modulo [ 문제 ] 문제를 읽자마자 바로 나머지 연산자(%)를 사용해야겠다, 라고 생각했는데 주의사항에 나눗셈(/), 나머지(%)연산자 사용금지라고 되어있었다... 저 두 연산자를 모두 사용하지 않으면 이 문제를 어떻게 풀어야하나.. 감이 오지 않았는데, 예전에 비슷한 문제를 풀었던 기억이 났다. 나누는 값으로 -값이 되기 전까지 계속해서 빼면 되는 것이다! [ 풀이 ] 나의 로직은 다음과 같다. while 반복문을 이용하여 나누는 값으로 반복적으로 -를 하여 나머지값을 구한다. function modulo(num1, num2) { // (5, 2) if(num1 === 0) { //주의사항에 적힌대로, 0은 어떤 수로 나누어도 나머지가 0이다. return 0; } else if(num2 === 0){ //주.. 14_superIncreasing [ 문제 ] 문제는 간단하다. 모든 각 요소들이 이전까지의 요소들의 합보다 더 크면 true, 하나라도 같거나 작다면 false를 return한다. 여기서 주의해야할 점은, arr[i]는 자연수가 아닌 '정수'라는 것. 즉 -의 값이 있을 수도 있다!(이걸 간과하여 처음에 테스트 하나를 통과하지 못했다.) [ 풀이 ] 나의 로직은 다음과 같다. 1/ 이전 까지의 요소들의 합에 대한 변수를 선언한다. 2/ 반복문을 돌면서 해당 인덱스의 값이 이전 요소들의 합보다 작으면 false를 리턴한다. 만약 크면 이전까지의 요소값에 더한다. function superIncreasing(arr) { let all = arr[0] //이전 요소들의 값을 all이라는 변수에 선언하고, 0번째 인덱스를 할당한다. for(l.. 11_removeExtremes [ 문제 ] 처음 문제를 봤을 때는 '아, 반복문 돌려서 가장 짧은 문자열 하나 찾고, 또 반복문 돌려서 가장 긴 문자열 찾아서 splice함수로 제거하면 되겠네!' 이렇게 간단하게 생각했다. 하지만 반복문을 두번 돌리는 대신 한번 돌림으로써 시간복잡도를 줄이고 싶었고, 그럴려다 보니 조금 머리가 아팠다. 그리고 특이점은, 가장 짧은 문자열 또는 가장 긴 문자열이 하나만 존재하는 것이 아니라 여러개가 존재할 수 있다는 것. [ 풀이 ] 나의 로직은 다음과 같다. 1/ 먼저 가장 문자열 길이가 긴 값, 짧은 값의 index값을 할당할 변수를 각각 shortestIndex, longestIndex로 선언한다. 2/ 인덱스 0, 1 값의 길이를 비교하여 짧은 값의 index를 shortestIndex에, 길거.. 10_insertDash [ 문제 ] 문제를 해석해보면, 연속된 홀수 사이에 '-'를 추가한 문자열을 반환하는 것이다. 이 문제의 특이점은 '문자열' 형태의 숫자를 입력받는다는것과, 문자열 형태의 값을 반환해야 한다는 것! [ 풀이 ] 나의 로직은 간단하다. 반복문을 이용하여 해당 인덱스의 값과 전 인덱스의 값이 홀수이면 사이에 '-'를 추가해주는 것! function insertDash(str) { let result = str[0]; //먼저 변수 result를 선언하고, [0]인덱스의 값을 넣어준다. 문자열 타입이다. for(let i = 1; i < str.length; i++){ //반복문을 이용하여 if(str[i-1] % 2 === 1 && str[i] % 2 === 1){ //전 인덱스의 값과 현재 인덱스의 값이 .. 09_ABCheck [ 문제 ] 입력받은 문자열에서 'axxxb'이거나, 'bxxxa'가 포함되어있으면 true, 아니면 false를 반환하는 문제이다. 이번 문제는 주의사항을 잘 봐야하는데, 대소문자를 구분하지 않고 / 공백도 한 글자로 취급 / 'a','b'는 중복해서 등장 할 수 있다. 입출력 예시를 보면 입력받은 문자열이 'lane Borrowed'이다. 'ane B' 이렇게 a로 시작하여 b로 끝나는 길이 5인 문자열이 포함되었기 때문에 true를 반환한다. [ 풀이 ] 나의 로직은 다음과 같다. 1/ toLowerCase함수를 이용하여 입력받은 문자열을 전부 소문자로 만들어 준다. 2/ 반복문과 조건문을 이용하여 true/false를 결정한다. function ABCheck(str) { let lowerLette.. 08_convertDoubleSpaceToSingle [ 문제 ] 입력받은 문자열에 있는 두 칸의 공백을 한 칸의 공백으로 바꾼 후, 그 문자열을 반환하는 문제이다. 입출력 예시를 보면, 'string with double spaces'에서 중간의 공백이 전부 두 칸이다. 이걸 한 칸씩 변경한 'string with double spaces'값을 반환하는 것이다. [ 풀이 ] 나의 로직은 다음과 같다. 1/ split함수를 이용하여 구분자를 ' ' 즉, 두 칸의 공백으로 하여 배열로 만든다. 2/ 그 배열을 다시 ' ' 즉, 한 칸의 공백으로 연결하여 문자열을 만든다. 예를 들어보면, 아래와 같다. let str = 'javascript is good'; //javascript와 is 사이에 두 개의 공백이 들어가있다. let arr = str.split(.. 이전 1 2 다음