일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Flutter
- 스파르타내일배움캠프TIL
- 중심사회
- 스파르타내일배움캠프WIL
- 개인공부
- 백준
- 프로그래머스
- 컴퓨터구조론 5판
- 코딩테스트
- 스파르타코딩클럽
- 부트캠프
- 개발자스터디
- 국비
- 항해
- 컴퓨터개론
- 99일지
- til
- AWS
- 자바
- 99클럽
- Spring
- 소프트웨어
- Python
- MySQL
- 운영체제
- java
- 개발자블로그
- 내일배움캠프
- 스파르타내일배움캠프
- wil
- Today
- Total
컴공생의 발자취
StringBuilder에 대해 본문
💡 오늘의 학습 키워드
- StringBuilder
* .append(String str)
* .insert(int offset, String str)
* .replace(int index1, int index2, String str)
StringBuilder
- .append(String str) : 문자열 추가하기
StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append("def");
System.out.println(sb);
// result : abcdef
- .insert(int offset, String str) : offset 위치에 문자열 추가하기
StringBuilder sb = new StringBuilder("abc");
sb.insert(2, "00");
System.out.println(sb);
// result : ab00c
- .replace(int index1, int index2, String str) : 첫 번째와 두 번째 파라미터로 받은 숫자 인덱스에 위치한 문자열 대체하기
* 인덱스는 0부터 시작하며 아래의 예시는 인덱스 [2]번인 "l"과 [4-1]번인 "l"을 "yoy"로 대체하는 것이다.
StringBuilder sb = new StringBuilder("hello");
sb.replace(2, 4, "yoy");
System.out.println(sb);
// result : heyoyo
오늘의 회고
문제1 : [행렬의 덧셈]
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
2개의 2차원 배열이 주어지는데, 같은 2차원 배열로 각 요소의 합을 리턴해주는 문제이다.
리턴할 배열에 입력받은 각 배열의 요소를 2중 반복문을 통해 더해줬다.
생각보다 너무 쉽게 끝나서 당황했고, 이 기세로 미들러 문제도 풀이했다.
- 어떻게 해결했는지
// 입력 : 행과 열의 크기가 같은 2개의 2차원 배열
// row = 가로 column = 세로의 길이 구하기
// answer의 배열 크기 지정 및 초기화
/* 2중 반복문 이용하기
for (column)
for (row)
answer = arr1 + arr2
*/
// result : 입력받은 2차원 배열 2개의 값을 더한 것
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int column = arr1.length;
int row = arr1[0].length;
int[][] answer = new int[column][row];
for (int i = 0; i < column; i++) {
for (int j = 0; j < row; j++)
answer[i][j] = arr1[i][j] + arr2[i][j];
}
return answer;
}
}
문제2 : [기사단원의 무기]
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
기사단원 n명을 입력받는데, 1~n까지의 기사가 각 숫자의 약수만큼 공격력을 가지는 무기를 선택할 수 있다.
각 기사단원의 무기는 공격력1 = 철 1kg이며, 대장장이가 주문해야 하는 철의 총합을 구하는 문제이다.
단, 기사단원이 m(문제에서는 limit)초과의 무기를 선택할 경우, l(문제에서는 power)의 공격력을 가지는 무기를 선택할 수 있다.
한마디로 각 기사단원의 공격력 총합을 구하는데, 특정 공격력 초과(문제에서 limit)이면 정해진 공격력을 가지는 무기(문제에서 power)로 선택해서 총합을 구해야 한다.
우선 기사단원의 수(1~.number)까지의 약수를 배열로 구하고
구한 약수를 전부 더하는데, 특정 공격력 이상일 경우(limit보다 클 경우)는 정해진 공격력을 가지는 무기(power)의 공격력? 철?을 더해줬다.
- 어떻게 해결했는지
// 입력 : 기사단원의 수(number), 공격력의 제한수치(limit), 제한 수치 초과시 사용할 무기의 공격력(power)
// 변수 : 기사단원이 사용할 무기의 공격력(약수)를 담을 배열(measure)
/* 기사단원의 수(1~number)까지의 약수 구하기
1~number까지 반복문 돌기 = i
약수 개수 구할 변수 선언 및 초기화(measureNum)
1~i/2까지 반복문 돌기 =j
i%j == 0일 경우, 약수 개수++
약수 개수++ -> 마지막 자기 자신 포함
기사단원의 약수(measure[i-1]) = 약수 개수
*/
// 기사단원의 수만큼 반복문 돌기
// 만약 제한 수치 초과시, answer += power
// 아닐 경우, answer += 기사단원의 약수(measure[i])
// result : 무기를 모두 만둘기 위해 필요한 철의 무게(공격력 1 = 철 1kg)
import java.util.Arrays;
class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
int[] measure = new int[number];
for (int i = 1; i <= number; i++) {
int measureNum = 0;
for (int j = 1; j <= i/2; j++) {
if (i%j == 0)
measureNum++;
}
measureNum++;
measure[i - 1] = measureNum;
}
for (int i = 0; i < number; i++) {
if (measure[i] > limit)
answer += power;
else
answer += measure[i];
}
return answer;
}
}
- 무엇을 새롭게 알았는지
어제의 문제를 풀이하면서 String += "a" 이런 식은 비효율적이고 StringBuilder을 사용하라는 피드백을 받고 이에 대해 알아봤다. 비효율적인 이유는 문자열은 한 번 생성되면 바꿀 수 없기 때문이다.
정확하게는 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 들어가기 때문이라고 한다. 실로 놀랍다.... 😮!!
방금 말한 것도 조금 정리해서 이 글에 적어야 되는데..
오늘 할 일 오늘만 내일로 좀 미뤄본다..
내일 학습할 것은 무엇인지
- 빅분기 자격증 공부!!!
- 클럽99 코딩테스트
'💡 코테' 카테고리의 다른 글
나누어 떨어지는 숫자 배열 (0) | 2024.04.05 |
---|---|
하샤드 수 및 이상한 문자 만들기 (0) | 2024.04.04 |
자바 char 배열 정렬 (Sorting) 및 형변환 (char Array to String && Array to String) (3) | 2024.04.02 |
자바 동적 배열 선언 및 형변환 (long to String) (0) | 2024.04.01 |
JAVA 자동 형변환 & 강제 형변환 (0) | 2024.03.31 |