[이코테]구현:시뮬레이션과 완전탐색

해피데빙·2022년 7월 1일
0

코딩테스트

목록 보기
26/52
post-custom-banner

구현

머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
결국에는 소스코드로 구현을 해야하니까 결국 모든 문제를 구현 문제라고도 할 수 있지만
흔히 구현이 어렵거나 구현에 초점을 맞춘 문제들

  • 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제
  • 알고리즘은 간단한데 코드가 지나칠만큼 길어지는 문제 (언어별로 다를 수 있다)
  • 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제
  • 문자열을 특정 기준에 따라서 끊어 처리해야 하는 문제 (파이썬이 제일 쉽다)
  • 적절한 라이브러리를 찾아서 사용해야 하는 문제 (모든 순열, 조합을 구하는 : 파이썬으로 굉장히 간결하게 가능)

행렬

  • 2차원 배열
  • 세로 : 행, 가로 : 열
  • 완전탐색, 시뮬레이션 문제에서 왼쪽 위가 행렬에서 첫번째 원소
  • 방향 벡터가 자주 활용된다

문제1. 행렬

function secondD(arr){ 
	let x=1; 
   let y=1; 
   
  for(let a of arr){ 
  	if(a === "R"){ 
   	if(y<arr.length-1)y = y+1;
	}
   if(a === "L"){ 
       if(y<3)y = y-1;
   }
   if(a === "U"){
   	if(x<3)x = x-1;
    	
   }
   if(a === "D"){ 
       if(x<arr.length-1)x = x+1;
   }

	} 
   return [x,y]
}

=> 나는 결과적으로 했는데


=> 하나하나 1,n과 비교하면서 continue할 것들을 잡아주는 것이 더 효율적

문제2. 시각

시도1: 틀림 (&&로 풀어버림)

초 03 13 23 ... 53 [6]
초 30 ...39 [10]
-> 33은 중복
//15개


분 03 13 23 ... 53
 31 ...39
 // 15개
 
시 1~N까지 : 3이 있으면 아예 없어야 
//00분 00초 ~ 59분 59초 : 분마다 0-59 
60 * 60 

시도2 : 무한

function timer(N){ 
let h =1; 
let m =1; 
let s =1; 

while(h<N+1){ 

if(String(h).includes('3')){ 
count++;
continue;
}else if(String(m).includes('3')){ 
count++;
continue;
}else if(String(s).includes('3')){ 
count++;
continue;
}

s++;

if(m === 60){h++; }
if(s === 60){m++; }

}

return count

}

  • 모두 for문으로 표현, 0부터 시작해서 없는 경우도 포함
  • string으로 모두 바꿔서 '3'이 있는지 확인

문제3. 왕실의 나이트

내 풀이 : 풀었다!

function Knight(num){ 
let x =num.charCodeAt(0)-'a'.charCodeAt(0)+1, y =Number(num[1]);  // a : 97
let subX = [2, 2, -2, -2, -1, -1, 1, 1,]
let subY = [-1, 1, 1, -1, -2, 2, 2, -2 ]
let dx=x, dy=y; 
let count=0; 

for(let i=0; i<8; i++){ 
	dx = x+subX[i]
    dy = y+subY[i]
    if(dx > 0 && dy > 0 && dx < 9 && dy < 9 )count++;
} 
return count;


}


문제4. 문자열 재정렬

  • 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤 그 뒤에 모든 숫자를 더한 값을 이어서 출력
  • isNum() : 숫자면 true, 아니면 false
  • isNaN(): 숫자면 false, 아니면 true
  • parseInt(), Number(): 숫자면 숫자, 아니면 NaN

내 풀이 : 맞았다!

function matching(str){ 
let alphabet = /[A-Z]/g
let num = /[0-9]/g

let string = str.match(alphabet).sort().reduce((acc,cur)=> acc+cur, '')
let number = str.match(num).reduce((acc, cur)=> acc+Number(cur), 0)

return string + number

}

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17
post-custom-banner

0개의 댓글