공부한 내용
문제 설명
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
제한사항
1 ≤ p의 길이 ≤ 18
p의 길이 ≤ t의 길이 ≤ 10,000
t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
class Solution {
public int solution(String t, String p) {
int answer = 0;
int tLength = t.length();
int pLength = p.length();
long pNum = Long.parseLong(p);
for(int i = 0; i <= tLength - pLength; i++) {
String str = t.substring(i, i + pLength);
// Integer strNum = Integer.valueOf(str);
// Integer pNum = Integer.valueOf(p);
// long pNum = Long.parseLong(p);
long strNum = Long.parseLong(str);
if(strNum <= pNum) {
answer++;
}
}
return answer;
}
}
substring()
으로 그 고민을 해결Integer.valueof()
메서드를 통해 String타입을 형변환해서 크기를 비교하고 답을 계산했더니 런타임 에러가 발생. 그 이유가 문자열 p의 길이가 최대 18로 int타입의 최대길이는 10이기 때문이였음. 그래서 Long.parseLong()
을 사용해서 문제 해결long pNum = Long.parseLong(p);
부분이 처음에 for문 안에 있었는데 for문 밖에 있는게 더 좋지 않겠냐는 팀원의 조언을 얻음!문제 설명
명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.
가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.
제한사항
sizes의 길이는 1 이상 10,000 이하입니다.
sizes의 원소는 [w, h] 형식입니다.
w는 명함의 가로 길이를 나타냅니다.
h는 명함의 세로 길이를 나타냅니다.
w와 h는 1 이상 1,000 이하인 자연수입니다.
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int width = 0;
int height = 0;
for(int i = 0; i < sizes.length; i++) {
if(sizes[i][0] < sizes[i][1]) {
int rotation = sizes [i][1];
sizes[i][1] = sizes[i][0];
sizes[i][0] = rotation;
}
if(width < sizes[i][0]) {
width = sizes[i][0];
}
if(height < sizes[i][1]) {
height = sizes[i][1];
}
}
answer = width * height;
return answer;
}
}
코딩테스트 연습을 하다가 for문에 length를 사용해서 문제를 풀었는데 에러가 떠서 봤더니 length가 문제였다. 생각없이 사용해서 몰랐는데 length와 length()차이를 모르고 의식의 흐름대로 사용하고 있었던 것이다.
length
는 배열의 final int변수이고 length()
는 문자열 요소를 접근할때 사용하는 메서드이다. 그러니까 length
는 배열이 생성될때 길이가 결정되는 상수인 것이고, 문자열은 length()
메서드를 사용하는 이유는 String이 char배열을 이용해서 만들었기 때문이다.
하루를 돌아보며, TMI
화이팅
참고자료