본문 바로가기

main/Algorithm

구름톤 챌린지 7일차 일기

지난 주 4, 5일차 문제를 못 풀어서 블록 두 개를 놓쳐버렸다 ㅠ_ㅠㅠ!!!

(그리고 아직도 못 풀었음 ..)

 

문제 6. 문자열 나누기

문제 이해하는 게 너무 어려워서 계속 못 풀다가 결국 일상표 해설 듣고 풀었다.

rl.on('close', () => {
	const set = new Set();
	for (let i=1; i<input.length; i++) {
		for (let j=i+1; j<input.length; j++) {
			set.add(input.slice(0, i));
			set.add(input.slice(i, j));
			set.add(input.slice(j));
		}
	}
	const sortedMap = new Map();
	const sortedList = [...set].sort();
	sortedList.map((el, idx) => {
		sortedMap.set(el, idx+1);
	})
	
	let totalsum;
	let result = 0;
	for (let i=1; i<input.length; i++) {
		for (let j=i+1; j<input.length; j++) {
			totalsum = sortedMap.get(input.slice(0, i)) + sortedMap.get(input.slice(i, j)) + sortedMap.get(input.slice(j))
			if (result < totalsum) result = totalsum;
		}
	}
	console.log(result)
})

1. 주어진 문자열을 3등분한다. 이 때 잘린 문자열의 중복이 없도록 set을 이용한다.

2. set에 저장된 문자열들을 사전 순으로 정렬하고, 정렬된 문자열을 key로, idx 값을 value로 map에 저장한다.

3. 다시 주어진 문자열을 3등분하면서, 해당 문자열들의 점수를 합산하여 가장 높은 점수를 result에 저장한다.

 

 

문제 7. 구름 찾기 깃발

rl.on('close', () => {
	let result = 0;
	const direction = [[-1, 0], [-1, -1], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1]];
	for (let i=0; i<N; i++) {
		for (let j=0; j<N; j++) {
			if (cloudList[i][j] === '1') continue;
			let cloudCnt = 0
			direction.map((d) => {
				nextI = i + d[0]
				nextJ = j + d[1]
				if (nextI >= 0 && nextI < N && nextJ >= 0 && nextJ < N) {
					if (cloudList[nextI][nextJ] === "1") cloudCnt++;
				}
			})
			if (cloudCnt === Number(K)) result++;
		}
	}
	console.log(result)
})

옛날에 지겹도록 풀었던 2차원 배열 문제 같은.. direction 돌리면서 추억에 잠김ㅎ

1. 기준 좌표에서 확인해야 할 인덱스 방향들을 direction 배열로 만들어 둔다.

2. cloudList가 0이면, 해당 좌표에 구름이 없으므로 direction 범위를 확인하며 주변에 구름이 몇개 있는지 확인한다.

3. 구름이 K값과 같다면 result 변수를 증가시킨다.

 

 

내일도 쉬운 문제 나왔으면..🥹