🧾알고리즘 테스트
1. 윷놀이
우리나라 고유의 윷놀이는 네 개의 윷짝을 던져서 배(0)와 등(1)이 나오는 숫자를 세어 도, 개, 걸, 윷, 모를 결정합니다. 네 개 윷짝을 던져서 나온 각 윷짝의 배 혹은 등 정보가 주어질 때 도(배 1개, 등 3개), 개(배 2개, 등 2개), 걸(배 3개, 등 1개), 윷(배 4개), 모(등 4개) 중 어떤 것인지를 결정하는 프로그램을 작성하세요.
chechin | result |
[0, 1, 0, 1] | 개 |
[1, 1, 1, 0] | 도 |
[0, 0, 1, 1] | 개 |
[0, 1, 0, 0] | 걸 |
function solution(arr1) {
let answer= "";
let bae = 0;
for(i in arr1){
if(arr1[i] === 0){
bae++;
}
}
switch (bae){
case 1:
answer = "도";
break;
case 2:
answer = "개";
break;
case 3:
answer = "걸";
break;
case 4:
answer = "윷";
break;
case 0:
answer = "모";
break;
}
return answer;
}
let arr1=[0,1,0,0];
console.log(solution(arr1))
배나 등의 개수 둘 중 하나만 알고 있어도 윷의 결과를 판별할 수 있기 때문에 둘 중 하나의 개수만 뽑아낸다.
배의 개수는 정해져 있기 때문에 개수에 따라서 각각 처리해줄 수 있는 switch문으로 작성한다면 조금더 깔끔하게 풀이가 가능하다.
2. Triangular Output
첫째 줄에 정수 n이 주어진다. (0≤n≤100)
다음 예제와 같이 삼각형 모양으로 ‘*’을 출력하세요. (공백의 개수와 별의 개수를 정확하게 확인해주시길 바랍니다. 🙆🏻♂️)
checkin | result |
3 | |
6 | |
9 |
찍히는 문자의 규칙을 제일 먼저 파악하는 것이 중요하다.
공백부분과 별이 찍히는 부분으로 나눠서 풀지만,
출력이 네모나게 나오게 처리하고싶어서 왼쪽 공백, 별 출력, 오른쪽 공백으로 처리했다.
왼쪽 공백의 개수와 오른쪽 공백의 개수는 동일하기 때문에 어렵지는 않다.
function solution(star){
for(let i=0; i<star; i++) {
let line = "";
//왼쪽
for(let j=0; j<star-i; j++){
line += " ";
}
//star print 2n-1
for(let j=0; j<2*i+1; j++){
line += "*";
}
//오른쪽
for(let j=0; j<star-i; j++){
line += " ";
}
// 한줄씩 출력
console.log(line);
}
}
let star= 9;
solution(star)
공백의 수는 규칙에 따라 star-i 라는 것을 어렵지 않게 알 수 있다.
별의 개수는 행이 n일때 2n+1이다.
코드에서의 for문의 index는 1부터가 아니라 0부터 시작이기 때문에 2n-1로 해주어야 한다.
3. 상하좌우 큰 수 찾기
5x5 2차원 배열이 주어질 때 어떤 원소가 상하좌우에 있는 원소보다 클 때 해당 위치에 * 을 표시하는 프로그램을 작성하세요. 경계선에 있는 수는 상하좌우 중 존재하는 원소만을 비교합니다.
checkin | result |
[[3,4,1,4,9], [2,9,4,5,8], [9,0,8,2,1], [7,0,2,8,4], [2,7,2,1,4]] |
3 4 1 4 * 2 * 4 5 8 * 0 * 2 1 7 0 2 * 4 2 * 2 1 4 |
[[7,4,6,5,9], [6,1,3,4,5], [4,8,5,6,9], [1,3,0,6,4], [6,4,8,1,7]] |
* 4 * 5 * 6 1 3 4 5 4 * 5 6 * 1 3 0 6 4 * 4 * 1 * |
function surroundCheck(arr, i, j){
//상
if(i>0 && (arr[i][j] <= arr[i-1][j])){
return false;
}
//하
if(i<4 && (arr[i][j] <= arr[i+1][j])){
return false;
}
//좌
if(j>0 && (arr[i][j] <= arr[i][j-1])){
return false;
}
//우
if(j<4 && (arr[i][j] <= arr[i][j+1])){
return false;
}
return true;
}
function solution(arr1){
let answer = [[],[],[],[],[]];
for(let i=0; i<5; i++){
for(let j=0; j<5; j++){
if(surroundCheck(arr1, i, j)){
answer[i].push("*");
}else{
answer[i].push(arr1[i][j]);
}
}
}
return answer;
}
let arr1=[[7,4,6,5,9], [6,1,3,4,5], [4,8,5,6,9], [1,3,0,6,4], [6,4,8,1,7]];
console.log(solution(arr1));
직관적으로 이중 배열의 모든 요소를 탐색하며 상하좌우를 비교해주면 되는 문제이다.
가장 말썽을 피우는 부분은 아무래도 array의 index범위를 넘어가는 부분을 처리해주는 부분이다.
▶코드 설명 영상
😎오늘 한 일
🧾알고리즘 테스트
🔩운동
🍺주간 마무리 팀토크
👻아무 말
오늘 알고리즘 테스트를 마지막으로 알고리즘 주간이 끝이 났다.
자신이 있기도 했지만 그것보다는 이제는 시험이 너무나도 익숙해진 느낌이다.
어떤 중요한 시험이 있어도 이제는 잘 떨리지가 않는다.
이 시험이 끝이 아니니까.
못해도 이게 내 인생의 마지막 시험이 아니며,
잘해내더라도 다음에도 다가올 다른 시험을 준비해야한다.
그냥 꾸준히 공부하고 준비하는 방법밖에는 없다.
많은 시험을 겪으며 이제는 몸이 알아서 체득한 느낌이다.
이제 드디어 드디어 알고리즘 주간이 끝이 났다.
주특기 주간이 시작되는데
커리큘럼만 따라가면서 만족하지 말고
나만의 배움을 이어나가야겠다.
'개발일기' 카테고리의 다른 글
[TIL] 성불하게 해주세요 (1) | 2022.11.26 |
---|---|
[TIL] 비트 주세요 (1) | 2022.11.25 |
[TIL] 고통이 무뎌질 만큼 (1) | 2022.11.23 |
[TIL] 자바스크립트를 알고리즘으로 배웠어요 (2) | 2022.11.22 |
[TIL] 행복했던 너와 이제는 안녕... (0) | 2022.11.19 |