반응형
오느릐 문제. 로마 숫자를 정수형태로 바꿔보기.
leetcode.com/problems/roman-to-integer/
아래는 처음에 푼 방식. 제대로 작동하기는 했으나 속도도 느리고.. 음..
public class cote0312_13_RomanToInteger {
public int romanToInt(String s) {
//s의 길이를 알아야겠징
int[] iArr=new int[s.length()];
String[] arr=s.split("");
for(int i=0; i<s.length(); i++){
System.out.println(arr[i]);
//s에 대해 포문을 돌려서 각 자릿수가 어떤 문자인지 숫자로 치환한다
switch(arr[i]){
case "I": iArr[i]=1;
break;
case "V": iArr[i]=5;
break;
case "X": iArr[i]=10;
break;
case "L": iArr[i]=50;
break;
case "C": iArr[i]=100;
break;
case "D": iArr[i]=500;
break;
case "M": iArr[i]=1000;
break;
default: break;
}
}
if(iArr.length==1){
return iArr[0];
}
int sum=0;
//iArr에서 이제 계산을 시작한다
for(int i=0; i<iArr.length; i++){
System.out.println(iArr[i]);
}
for(int i=0; i<iArr.length-1; i++){
//앞에거가 뒤에거보다 작으면 뒤에거에서 앞에거를 뺀다
if(iArr[i] < iArr[i+1]){
sum+=(iArr[i+1]-iArr[i]);
i++;
}else{ //앞에거가 뒤에거보다 크거나 같으면 더한다
sum+=iArr[i];
}
//마지막거면 마지막 젤 작은 수를 더해준다
if(i==iArr.length-2){
sum+=iArr[iArr.length-1];
}
System.out.println(sum);
}
return sum;
}
}
아래는 스터디 후 코드를 줄여본 방식 (improved) 그렇지만 그렇게 효율적인 방법은 아닌가보다.
public int romanToInt(String s) {
//s의 길이를 알아야겠징
int[] iArr=new int[s.length()];
String[] arr=s.split("");
for(int i=0; i<s.length(); i++){
//s에 대해 포문을 돌려서 각 자릿수가 어떤 문자인지 숫자로 치환한다
switch(arr[i]){
case "I": iArr[i]=1;
break;
case "V": iArr[i]=5;
break;
case "X": iArr[i]=10;
break;
case "L": iArr[i]=50;
break;
case "C": iArr[i]=100;
break;
case "D": iArr[i]=500;
break;
case "M": iArr[i]=1000;
break;
default: break;
}
}
int sum=0;
//iArr에서 이제 계산을 시작한다
for(int i=0; i<iArr.length; i++){
//앞에거가 뒤에거보다 작으면 뒤에거에서 앞에거를 뺀다. i가 끝에서 두번째까지만.
if(i<iArr.length-1 && iArr[i] < iArr[i+1]){
sum+=(iArr[i+1]-iArr[i]);
i++;
}else{ //앞에거가 뒤에거보다 크거나 같으면 더한다
sum+=iArr[i];
}
}
return sum;
}
트리문제도 그렇고 이 문제도 그렇고, 더한 값을 구하시오 할 때는 빼는 방법을 항상 생각해봐야 할 것 같다. 더한 값과 뺀 값이 일반적으로 생각하기엔 전혀 다른 값일 거 같은데 막상 코드에서는 결과값을 체크해서 확인할 수 있기 때문에 완전히 다른 방법이 있을 수 있더라구.
728x90
반응형
'TIL > Coding Test' 카테고리의 다른 글
[LeetCode] Two Sum (0) | 2021.03.16 |
---|---|
[LeetCode] Top K Frequent Elements (0) | 2021.03.15 |
[LeetCode] Path Sum (2) | 2021.03.11 |
[LeetCode] Binary Tree Inorder Traversal (2) | 2021.03.10 |
[LeetCode] Reverse String (0) | 2021.03.09 |