Blog

[Algorithm]16 오늘 실수한 부분들과 버블 정렬

Author
Summary
여러가지 모아서 정리!
Category
Study
Tags
Algorithm
Favorite
Memory Date
2023/08/18
Progress Status
Done
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
5 more properties
프로그래머스 알고리즘 문제를 풀면서 틀리거나, 햇갈렸거나, 기억하고싶은것들을 기록했다.
정수 타입별 범위 얼추 이 이정도로 요약 기억하기
얼추 로직은 빨리 구현했는데 오류가 발생해서 어딘가 싶었다. 통과통과가 나오다가 마지막 13,14번째에서 큰 숫자가 테스트 된 것 같다. 제한조건을 잘 보고 혹시나 저 위 범위는 +-를 합친 범위이니 반정도 넘어갈것 같다 하면 long도 생각해야 한다. 기본적으로 타입의 범위를 어느정도 인지하고있어야겠다.
class Solution { //input x,n ->random //cal /* 10 , [1,2,3,4,5,6,7,8,9,10] 10 n, [x,x+x,(x+x)+x, ... n개] */ //out //if x=3 //3, 3+3, (3+3)+3 //x, x+x, (x+x)+x public long[] solution(int x, int n) { long[] arr = new long[n]; long j=0; if(x < -10000000 && x > 10000000){ return new long[0]; } for(int i=0; i<arr.length; i++){ j += (long)x; arr[i] = j; } return arr; } }
Java
복사
반복문에서 break; continue; 의 위치를 정확히 하자.
이 또한 반복문이나 조건문 등 제어문 틀은 잡았지만 탈출에 대한 조건을 정확하게 위치하지 못했다. 한번만 더 대입해보면서 가상으로 테스트 할 필요가 있다.
문자열(String)클래스와 관련된 것들을 좀 더 익숙해져야 겠다. 좀 많이 사용되는 것은 능숙하게 생각해 내야 할 것 같다. 이것 말고도 자주 타입간의 변환, 숫자간의 타입 변환 등을 해보면서 능숙해져야 한다.
반복문에 초기값 타입 계속 빼먹는다. 정신차려라.
버블정렬(순차적으로 비교, 조건에 따라 교환orNot)을 하나씩 작성하면서 원리를 이해했다. temp를 만들어서 넣고 교대로 넣는것, 이전에 배웠었고 확실히 기억하는데 버블정렬이었던것이 기억안났었다. 아하 이거였구나 했다.
우선 처음 주어진 값이 long이었기 때문에 → 문자열로 변환 → 문자 배열 타입으로 변환을 거쳐서 버블정렬에 들어가야 한다.
만약 오름차순이면 조건문이 변경 될 것이다 지금은 큰 경우 뒤로 보내는 것이기 때문에 오름차순이다. 아무것도 안보고 구성했을땐 얼추 j와 j+1 인덱스를 교환해야 되는 것 까지는 기억났는데, temp를 만들고 거기에 넣었다가 교대하는 방식이었다는 것을 ChatGPT의 힌트를 통해 회상 할 수 있었다.
마찬가지로 반환할 값을 보고 역순 또는 반환 타입에 맞추어서 다시 형변환을 해야 하는것도 잊지 말자.
class Solution { //input // ex) long 15 -> Integer.toString(n) // => 51 // //output //answer public long solution(long n) { long answer = 0; String strNum = Long.toString(n); char[] arr = strNum.toCharArray(); //ex 45291 => 4,5,2,9,1 //=>if([i 0]<[i+1 1]) { // [i+1] = [i]; //}else if([i 0]>[i+1 1]){ // continue; //} for(int i=0;i<arr.length;i++){ for(int j=0;j<arr.length-1;j++){ if(arr[j]<arr[j+1]) { char temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } String sortedStr = new String(arr); answer = Long.parseLong(sortedStr); return answer; } }
Java
복사