백준 - 2751번 ,1110번, 2231번

문딤·2022년 7월 12일
0
post-thumbnail

수 정렬하기 2

n개의 수를 오름차순으로 정렬 하시오 

풀이방법❓

array.sort()가 생각나고, 뿌려주면 될것 같다. 

소스코드

문제점
1. Array.sort()로는 시간 초과가 발생.
2. 차선책인 collection.sort()를 사용했더니 다시 또 시간초과가 발생.
해결책 
1-2 Arraylist로 데이터를 집어넣어  collection.sort();를 사용할 수 있게 한다.

3 출력을 위한 Stringbuilder 사용.

알아볼것

Stringbuilder역활 , 메모리 사용을 줄이는 방법?

참고

https://velog.io/@kimjy199/%EB%B0%B1%EC%A4%80-2751%EB%B2%88.-%EC%88%98-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-2-Java


더하기 사이클 1110번

		// 0<=n <=99 일때 정수
        // 10보다 작다면 앞에 0
        // 각자리 숫자를 더함.
        // 그러고 앞의 1의 자리수와
        // 뒤의 1의 자리 수를 더함 
        ex) 26=> 2 + 6 = 8 => 68  

풀이방법❓

자릿수 별로 잘라서 일의 자리 수와 결과 값 끼리 a+b = ab
느낌으로 만들고 이걸 while문으로 돌리자.

소스코드

위에 생각한 것처럼 일의 자리 와 결과값 일의자리를 더해주는 로직을 생각했다.

해결책
1. 몫과 나머지를 더한것에 나머지가 1의 자리라는 생각을 하는게 오래걸렸다.

2. 같은 수가 나올때까지 카운트한다.

알아볼것

다른 풀이 방법은 없을까?, 자릿수를 구하는 다른 방법은?


분해합 2231번

분해합은 자 자리수들의합 + 생성자 이겠구나? 하고 생각을 했다.

예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.
따라서 245는 256의 생성자가 된다.

여기서 전체 sum의 합 이라고 생각 못하고 삽질을 한다...

1부터 숫자를 반복해서 계속 증가해서 
그 숫자를 하나의 정수 형태로 변환해서 전체 sum으로 합을 구해서 
if(sum == N)의 조건을 걸어준다.
N의 숫자와 일치한다면 생성자를 찾았다는 걸 의미하니까 반복문을 마치면된다.

소스코드

구글링해서 어떻게 풀었는지 참고해봤다.
생각보다 더 짧아서 짜증이났다.

풀이방법❓

해결책
1. 정수 i를 String temp로 받아서 자릿수만큼 charAt()으로 쪼개서 sum
+  temp를 정수로 변환한 값을 더한다.

2. 전체 sum으로 합을 구해서 (sum == N)이면 break;
   만약에 값이 없다면 (i == N)으로 정수 i 와 값이 같을테니 0 출력

알아볼것

  • 비슷한 자릿 수 문제를 더 풀어볼 것
  • getNumericValue()

참고

https://velog.io/@lifeisbeautiful/Java-%EB%B0%B1%EC%A4%80-2292%EB%B2%88-%EB%B6%84%ED%95%B4%ED%95%A9-%EC%9E%90%EB%B0%94

profile
풀스택개발자가 될래요

0개의 댓글