[etc] 문자열 내마음대로 등
문자열 내 마음대로 정렬하기
고민
- [“abce”, “abcd”, “cdx”] , n2일때 abce , abcd의 b가 같음..그럴때는 사전순으로 정렬하라고함.
그래서 sort()로 미리 정렬해놈
내 풀이
function solution(strings, n) {
return strings.sort().sort(function(a,b){
return a.charCodeAt(n) - b.charCodeAt(n);
});
}
문자열 내림차순으로 배치하기
내 풀이
//방법 1
function solution(s) {
return s.split('').sort(function(a,b){
if( a>b) return -1;
if( a<b) return 1;
if( a==b) return 0;
}).join('');
};
//방법 2
function solution(s) {
return s.split('').sort().reverse().join('');
};
문자열 다루기
고민
- 입력값 ‘1e22’ 지수형식이 들어올때 문제 발생
내 풀이
function solution(s) {
// 1e22 가 들어올때 문제 발생
return s.length == 4 || s.length == 6 ? !isNaN(s) : false
}
//그래서 하나씩 돌림
function solution(s) {
if(s.length == 4 || s.length == 6){
s = s.split('').filter(function(data){
return isNaN(data)
})
return s.length == 0 ? true : false;
}
return false;
}
서울에서 김서방 찾기
고민 없음
내 풀이
function solution(seoul) {
var where = seoul.indexOf("Kim")
return `김서방은 ${where}에 있다` ;
}
소수 찾기
내 풀이 - 1 실패
// 이 방법은 하나씩 찾는 방법으로써 답은 맞지만 시간초과
function solution(n) {
if( n == 0 || n == 1 ) return 0;
var answer=0;
for( var i=2 ; i<=n; i++){
if( isPrime(i) ) answer++;
};
return answer;
}
function isPrime(n){
if(n < 2) return false;
for(var i=2; i<=n/2; i++){
if(n % i == 0) return false;
}
return true;
}
고민 많음
- n까지 하나씩 돌리다 보면 O(n)의 시간복잡도 도 통과 못 할 수 있다.
- 시간복잡도가 O(n) 되어야 한다. logN또는 √n 의 시간복잡도를 가져야 한다.
- 에라토스테네스의 체 원리를 이용 -> 시간복잡도를 √n으로 해결
내 풀이
function solution(n) {
let arr = [];
// 빈 배열에 값 초기화
for (let i = 2; i <= n; i++) {
arr[i] = i;
}
/*
1 , 2 , 3 , 4, 5,
6, 7, 8, 9, 10
11, 12, 13, 14, 15 ....
2의 배수 다 지우고 ,3배 배수 다 지우고 5의 배수 다지우고 6의 배수 다지우고
% 여기서 4은 2의 배수이니깐 이미 지워짐, 6도 마찬가지
그렇게 해서 남은게 소수란 이말이다
*/
for (let i = 2; i <= n; i++) {
if (arr[i] === 0) // 이미 체크된 수의 배수는 확인하지 않는다
continue;
for (let j=i+i; j<=n; j+=i) { // i를 제외한 i의 배수들은 0으로 체크
arr[j] = 0;
}
};
// 0이 아닌 수들은 모두 소수이므로 그것들의 갯수
return arr.filter(function(data){
if(data !== 0) return true;
}).length;
}
수박수박수박수
고민 없음
내 풀이
function solution(n) {
//쓸데없이 배열만들어서 어렵게 했네..
var arr = new Array( parseInt( n/(2) ) ).fill("수박");
if( n%str.length != 0) arr.push("수")
return arr.join('');
}
function solution(n) {
return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}
문자열을 정수로 바꾸기
고민 없음
내 풀이
function solution(s) {
return Number(s);
}
function strToInt(str){
return str/1
}
시저암호
고민 없음
- 지금 생각해보니 굳이 배열로 하지 않고 그냥 해도 될듯함.
내 풀이
function solution(s, n) {
var answer = '';
var code = [
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
]
return s.split('').map(function(data){
if( data == ' ') return ' ';
if( isFirstLetterCapital(data) ){
var index = code.indexOf(data)
if( index + n < code.length ){
return code[index+n];
}else{
return code[ index+n-code.length ];
}
}else{
var index = code.indexOf(data.toUpperCase())
if( index + n < code.length ){
return code[index+n].toLowerCase();
}else{
return code[ index+n-code.length ].toLowerCase();
}
}
}).join('')
}
//대문자 체크
function isFirstLetterCapital(string) {
return string.charCodeAt(0) === string.toUpperCase().charCodeAt(0);
}
약수의 합
내 풀이
function solution(n) {
var answer = 0;
for (let i=1; i<=n; i++){
if(n%i ===0) answer += i;
}
return answer;
}
이상한 문자 만들기
내 풀이
function solution(s) {
return s.split(' ').map(function(data){
var str='';
for( var i=0 ; i<data.length; i++ ){
if( (i+1)%2 == 0 ){
str+=data[i].toLowerCase()
}else{
str+=data[i].toUpperCase()
}
}
return str
}).join(' ');
}
자릿수 더하기
내 풀이
function solution(n)
{
return (n+'').split('').reduce(function(a,b){
return (a/1)+(b/1);
})/1;
}