goormlevel: [level1] Bubble sort(버블정렬)

송유나·2021년 1월 10일
0
  • 혼자 공부하다보니 점점 게을러지는 것 같아서 카카오 코딩테스트가 있다고 메일이 와서 무작정 신청해버렸다. 그래서 시작한 구름으로 알고리즘 풀기.
    코드업100제로다가 기초뿌시기 하고 싶었지만 javascript를 지원하지 않았다ㅠㅠ 알고리즘 풀 때 javascript/python을 사용하긴 하지만 신청한 코딩테스트는 javascript로 보기 때문에...그리고 goormlevel이 프로그래머스보다 문제가 쉬운 것 같아서 선택했다.

1. 문제

  • 버블정렬 사용하기
  • 입력: 첫 번째 줄에 Bubble 정렬을 진행할 수(들)의 개수를 입력하고 둘째 줄에 해당 개수에 맞게 수를 입력한다.
  • 출력: Bubble sort가 완료된 형태의 수열
  • 예시
    👉입력
    > 5
    > 9 6 3 2 7
    👉출력
    > 2 3 6 7 9 (마지막은 공백으로 끝남 주의)

2. 풀이 과정

  • 소요시간: 약 6시간?...(알고리즘보다 전처리 과정이 더 힘들었다🤓)
    👉이유
    1. readline 처음사용=>rl.close()의 적절하지 못한 사용으로 상당한 시간 소요
    2. 함수에 값이 한번에 들어오는 것이 아니고 차례로 들어오는 과정을 고려하지 못했음=>splice, split, push 메서드들 사용과정에서 무수한 에러..ㅎ
    3. 나머지=>테스트케이스에 자꾸 실패해서 머리굴리는 시간
  • 결과: 실패 성공
  • 어째서 통과를 못하는지 아직 모르겠다ㅠㅠ 어떤 테스트케이스길래 실패하는 것인지.. 일단 다른 문제들 더 풀어보면서 공부하다보면 정답이 보이지 않을까......ㅠ
    ❗goormlevel사용에 미숙해서 성공한줄도 모르고 끙끙댄거 실화입니다.
    프로그래머스처럼 여러개의 테스트케이스를 실행하고 각 테스트케이스마다 성공/실패 여부를 알려주는 것이 아니고!!
    정답/오답인지만 알려주는데 그게 누적되어 나타나서..맨 처음에 오답을 입력했던 기록이 남아있는것....그것도 모르고..나는 테스트케이스 몇 개가 실패한 줄 알고...찾고 계속 찾았는데....
    🔥결론은 문자열 마지막에 공백만 추가하는 코드 작성하고부터 이미 정답이었음🔥


3. 배운 것

  • split: 공백기준으로 자르기 위해 사용했는데 메서드에러가 자꾸 떴다.
    =>처음 들어오는 값은 숫자 한개라서 line.split(" ")을 사용할 수 없었던 것
  • split: 문자열을 분할하는 메서드=>array.split을 시도해서 안됐던 것
  • split: 그래서 input[1].split으로 특정 배열값을 지정해줬지만 값이 차례로 들어오기 때문에 input[1]에 아직 값이 저장되지 않아서 에러
  • readline: rl.close()가 더 이상의 입력을 받지 않도록 하는 메서드=>적절한 위치에 사용해야 함

4. 제출 코드

  • 전체적인 흐름
    1. 입력값 차례로 number[]에 저장
    2. 입력이 다 끝난 후 값 정리(분리(splice,split),변환(parseint))
    3. 버블정렬 실시
// Run by Node.js

const readline = require("readline");
const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout
});


var count = 0		//Bubble 정렬을 진행할 수(들)의 개수
var number = []		//수

rl.on("line", function(line) {
	number.push(line)		//입력값 number에 차례로 저장
	if(number.length >= 2){		//다 입력 받은 후 실행
		count = parseInt(number.splice(0,1))	//number[0]을 떼어서 숫자로 변환 후 count에 저장 (기존 number[0]은 삭제됨)
		number = number[0].split(" ")					//남은 number[0]값을 공백단위로 분리
		number = number.map(item => parseInt(item))		//number 배열 안의 값을 숫자로 변환

      var temp
		
        for(var i=0; i<count; i++){		//Bubble Sort 알고리즘
          for(var j=0; j<count-1-i; j++){
            if(number[j]>number[j+1]){
              temp = number[j+1]
              number[j+1] = number[j]
              number[j] = temp
            }
          }
        }
		number = number.join(" ")	//배열 형태를 문자열 형태로 바꿔줌
		number = number + " "		//맨 끝에 공백이 들어가야 한다는 Q/A따라서 맨 끝에 공백추가
		
		rl.close();
	}

}).on("close", function() {
	console.log(number)
	process.exit();
});

5. 마무리

프로그래머스처럼 다른 사람들의 풀이를 볼 수 있으면 좋을텐데..아쉽당
그리고 제출하기를 눌렀지만 마지막 테스트케이스 두개가 오답으로 떴다..
이유를 아시는 분은 지나가시다가 슬쩍 알려주시면 감사하겠습니다 ㅎㅎㅎㅠ

바보같은 경험이지만 앞으론 프로그램 사용법을 더 꼼꼼히 확인해야한다는 것을 배웠기 때문에 괜찮다...

profile
개발자를 꿈꾸는 햇병아리입니다.

0개의 댓글