문자열 다루기 기본 원문 보기
코딩테스트 연습 - 문자열 다루기 기본
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1
programmers.co.kr
👀 문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
🚥 제한사항
1️⃣ s는 길이 1 이상, 길이 8 이하인 문자열입니다.
📌 입출력 예
s | return |
"a234" | false |
"1234" | true |
🤨 고민
문자열에서 숫자열 판별을 위해 사용할 메소드? isDigit
💻 코딩
1차 제출.
class Solution { public boolean solution(String s) { boolean answer = true; // 문제설명에 나와있는 s의 길이에 대한 처리 if (s.length() != 4 && s.length() != 6) answer = false; // 문자열 s의 길이만큼 도는 for for (int i = 0; i < s.length(); i++) // s의 각 한자리씩 읽어 숫자판별 if (!Character.isDigit(s.charAt(i))) answer = false; return answer; } }📝채점
⏱ 소요시간 및 후기
소요 시간 5분~10분
Character 클래스의 isDigit 메소드가 생각나서 바로 적용하여 풀이했다.
몰랐더라면 isDigit 메소드를 직접 짰을 것 같다.
프로그래머스 코딩테스트 Level1 풀이 모음입니다.
Ctrl + F 를 이용해 문제 풀이를 찾아주세요.
🔽 알고리즘 문제 (프로그래머스 사이트)
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
💡 행렬의 덧셈
function solution(arr1, arr2) { return arr1.map((arr, index) => arr.map((x, y) => x + arr2[index][y])); }💡 두 개 뽑아서 더하기
function solution(numbers) { var answer = []; for(let a = 0; a < numbers.length-1; a++) { for(let b = a+1; b < numbers.length; b++) { const sum = numbers[a] + numbers[b]; if(answer.indexOf(sum) < 0) { answer.push(sum); } } } answer.sort((a, b) => a - b); return answer; }💡 제일 작은 수 제거하기
function solution(arr) { arr.splice(arr.findIndex((a) => a == Math.min(...arr)), 1); return arr.length < 0 ? arr = [-1] : arr; }💡 핸드폰 번호 가리기
function solution(phone_number){ return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); } // 정규식 표현 function solution(phone_number) { return phone_number.replace(/\d(?=\d{4})/g, "*"); }💡 평균 구하기
function solution(arr) { return arr.reduce((acc, cur) => acc + cur) / arr.length; }💡 자연수 뒤집어 배열로 만들기
function solution(n) { return String(n).split('').map((x) => Number(x)).reverse(); }💡 이상한 문자 만들기
function solution(s) { let arr = s.split(' '); let result = [];for(let i = 0; i < arr.length; i++) { let words = arr[i].split('').map((word, idx) => { return (idx % 2) ? word : word.toUpperCase(); }).join(''); result.push(words); } return result.join(' '); }💡 짝수와 홀수
function solution(num) { return (num % 2) ? "Odd" : "Even"; }💡 자릿수 더하기
function solution(n) { return (n+'').split('').reduce((acc, cur) => acc + Number(cur), 0); }💡 x만큼 간격이 있는 n개의 숫자
function solution(x, n) { let arr = []; for(let i = 1; i <= n; i++) { arr.push(x*i); } return arr; } // Array Function으로 ! function solution(x, n) { return Array(n).fill(x).map((v, i) => (i + 1) * v) }💡 정수 내림차순으로 배치하기
function solution(n) { return Number(String(n).split('').sort((x, y) => y - x).join('')); }💡 문자열을 정수로 바꾸기
function solution(s) { return +s; }💡 정수 제곱근 판별
function solution(n) { let num = Math.sqrt(n); return Number.isInteger(num) ? (num+1) ** 2 : -1; }💡 직사각형 별찍기
process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[1]); const row = '*'.repeat(a); for(let i = 0; i < b; i++) { console.log(row); } });💡 완주하지 못한 선수
function solution(participant, completion) { participant.sort(); completion.sort(); for(let i = 0; i < participant.length; i++) { if(participant[i] !== completion[i]) return participant[i]; } }💡 없는 숫자 더하기
function solution(numbers) { let answer = 0; for(let i = 0; i < 10; i++) { if(!numbers.includes(i)) answer+=i; } return answer; }💡 문자열 내림차순으로 배치하기
function solution(s) { return s.split('').sort().reverse().join(''); }💡 K번째수
function solution(array, commands) { let answer = []; for(let i = 0; i < commands.length; i++) { let list = array.slice(commands[i][0]-1, commands[i][1]).sort((a, b) => a - b); answer.push(list[commands[i][2]-1]); } return answer; }💡 수박수박수박수박수박수?
function solution(n) { return "수박".repeat(n).substring(0, n); }💡 내적
function solution(a, b) { return a.reduce((acc, _, i) => acc += a[i] * b[i], 0); }💡 가운데 글자 가져오기
function solution(s) { let strleng = Math.floor(s.length / 2); return s.length % 2 ? s.substr(strleng, 1) : s.substr(strleng-1, 2); }💡 나머지가 1이 되는 수 찾기
function solution(n) { for(let i = 2; i < n; i++) { if(n % i === 1) return i; } } /* function solution(n, x = 2) { return n % x === 1 ? x : solution(n, x + 1); } */💡 부족한 금액 계산하기
function solution(price, money, count) { let answer = 0; for(let i = 1; i <= count; i++) { answer += price * i; } return money > answer ? 0 : answer-money; } // 가우스 공식 (등차수열의 합) /* function solution(price, money, count) { const tmp = price * count * (count + 1) / 2 - money; return tmp > 0 ? tmp : 0; } */💡 두 정수 사이의 합
function solution(a, b) { let answer = 0; if(a === b) { return a; } else { if(a > b) { let temp = a; a = b; b = temp; } for(let i = a; i <= b; i++) { answer += i; } return answer; } } /* function solution(a, b) { let result = 0; return (a + b) * (Math.abs(b - a) + 1) / 2; } */💡 나누어 떨어지는 숫자 배열
function solution(arr, divisor) { let answer = arr.filter(a => a % divisor === 0).sort((a, b) => a - b); return answer.length === 0 ? [-1] : answer; }💡 2016년
function solution(a, b) { let dayOfTheWeek = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; let days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; b += 4; for(let i = 0; i < a-1; i++) { b += days[i]; } return dayOfTheWeek[b % 7]; }💡 문자열 내 p와 y의 개수
function solution(s){ let count = 0; s = s.toLowerCase(); for(let i = 0; i < s.length; i++) { if(s[i] === 'p') count++; else if(s[i] === 'y') count --; } return count === 0 ? true : false; } /* function solution(s) { return s.toLowerCase().split('p').length === s.toLowerCase().split('y').length; } */💡 콜라츠 추측
function solution(num) { let count = 0; while(num !== 1 && count !== 500) { num % 2 === 0 ? num /= 2 : num = num * 3 + 1; count++; } return num === 1 ? count : -1; }💡 서울에서 김서방 찾기
function solution(seoul) { return `김서방은 ${seoul.indexOf("Kim")}에 있다`; }💡 문자열 다루기 기본
function solution(s) { return (s.length === 4 || s.length === 6) && /^-?\d+$/.test(s); }💡 시저 암호
function solution(s, n) { return s.split('').map(val => { if(val === ' ') return val; const numCode = val.charCodeAt(); return val.toUpperCase().charCodeAt() + n > 90 ? String.fromCharCode(numCode - 26 + n) : String.fromCharCode(numCode + n) }).join('') }💡 같은 숫자는 싫어
function solution(arr) { let answer = []; for(let i = 0; i < arr.length; i++) { if(arr[i] !== arr[i+1]) answer.push(arr[i]); } return answer; } /* function solution(arr) { return arr.filter((val,index) => val != arr[index+1]); } */💡 음양 더하기
function solution(absolutes, signs) { let result = 0; absolutes.map((val, idx) => signs[idx] ? result += val : result += (-val)); return result; } /* function solution(absolutes, signs) { return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0); } */💡 숫자 문자열과 영단어
function solution(s) { let answer = s; const numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; for(let i = 0; i < numbers.length; i++) { let arr = answer.split(numbers[i]); answer = arr.join(i); } return Number(answer); }💡 하샤드 수
function solution(x) { let num = String(x).split('').map(a => Number(a)).reduce((acc, cur) => acc + cur); return x % num === 0 ? true : false; } /* function solution(x) { return x % (String(x).split('').reduce((acc, cur) => +cur + +acc)) === 0 ? true : false; } */💡 3진법 뒤집기
function solution(n) { let answer = 0; let stringNum = ''; while(n !== 0) { stringNum += String(n % 3); n = Math.floor(n / 3); } stringNum.split('').reverse().map((val, idx) => { if(idx === 0) answer = Number(val) * 1; else answer += Number(val) * Math.pow(3, idx); }) return answer; } /* const solution = (n) => { return parseInt([...n.toString(3)].reverse().join(""), 3); } */- 숫자.toString(num) : 10진법인 숫자를 num진수로 변환하고 문자열로 변환함
- parseInt("문자열인 숫자", num) : 문자열인 숫자를 num진수로 변환하고 int형으로 변환함
💡 약수의 합
function solution(n) { let answer = 0; for(let i = 1; i <= n; i++) { if(n % i === 0) answer += i; } return answer; }💡 약수의 개수와 덧셈
function solution(left, right) { let answer = 0; for(let i = left; i <= right; i++) { let count = 0; for(let y = 1; y <= i; y++) { if(i % y === 0) count++; if(i === y) { if(count % 2 === 0) answer += i; else answer -= i; } } } return answer; } /* function solution(left, right) { var answer = 0; for (let i = left; i <= right; i++) { if (Number.isInteger(Math.sqrt(i))) { answer -= i; } else { answer += i; } } return answer; } */💡 소수 찾기
function solution(n) { const s = new Set(); for(let i = 2; i <= n; i++) s.add(i); for(let j = 2; j < Math.sqrt(n); j++) { if(s.has(j)) { for(let z = j*2; z <= n; z += j) s.delete(z); } } return s.size; }💡 문자열 내 마음대로 정렬하기
function solution(strings, n) { strings.sort((a, b) => { let first = a[n]; let second = b[n]; if(first === second) return (a > b) - (a < b); else return (first > second) - (first < second); }); return strings; } /* function solution(strings, n) { return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n])); } */- "문자1".localeCompare("문자2") : 영어 정렬 상 문자1이 문자2보다 먼저이면 1, 문자2가 먼저이면 -1, 같으면 0을 반환
💡 "JavaScript".localeCompare("Database") => 1
"JavaScript".localeCompare("zira") => -1
"JavaScript".localeCompare("JavaScript") => 0
💡 예산
function solution(d, budget) { d.sort((a, b) => a - b); while(d.reduce((acc, cur) => (acc + cur), 0) > budget) { d.pop(); } return d.length; }💡 비밀지도
function solution(n, arr1, arr2) { return arr1.map((v, i) => (v | arr2[i]).toString(2).padStart(n, "0").replace(/0/g," ").replace(/1/g,"#")); } /* function solution(n, arr1, arr2) { return arr1.map((v, i) => (v | arr2[i]).toString(2).padStart(n, "0").replace(/1|0/g, a => +a ? "#" : " ")); } */- 내 풀이는 0과 1에 대한 정규식 처리를 각자 해줬는데 다른 사람의 풀이(주석)에서는 삼항연산자로 깔끔하게 처리했다.. 기가 막힌 코드..