항해99 2주차 알고리즘 연습의 첫째날입니다.
달리기반과 걷기반으로 나뉘어 프로그래머스 문제를 풀었습니다.
달리기반 - 1주 동안 총 40 문제 필수 + 14문제의 challenge 문제
걷기반 - 1주 동안 촌 28 문제 필수 + 26문제의 challenge 문제
프로그래머스 문제를 거의 100문제 이상 풀었기 때문에 정해준 문제를 확인해보니
키패드 누르기와 다트게임을 제외하고는 전부 푼 문제....
열심히 블로그에 풀이법을 작성하고 다른분들이 푼 방식과 비교도 하면서 학습을 마쳤다...
내일은 두 문제 마저 풀고 다른 문제를 더 풀어봐야할 것 같다.
김용빈 (https://dazbee.tistory.com/10)
서유리 (https://yuricoding.tistory.com/)
김우진 (https://blog.naver.com/woojin126)
자바 변수 앞에 -를 해도 된다.
int answer = 1;
return -answer;
이게 된다... ㅋㅋㅋ 몰랐다.
예를 들어 리턴 타입이 정수 배열인데,
public int [] solution(int[] numbers, String hand) {
HashSet으로 바꿔서 리턴해도 통과가 됨 ㅋㅋㅋ
public HashSet solution(int[] numbers, String hand) {
찾으신 팀원분 천재신듯 ... ㅋㅋ
내 풀이
class Solution {
public int solution(String s) {
int answer = 0;
boolean minus = false;
if(s.charAt(0) == '-')
minus = true;
int tenth = 1;
int minusNum = 0;
if(minus || s.charAt(0) == '+')
minusNum = 1;
for(int i = s.length() - 1; i >= minusNum; i--) {
answer += (s.charAt(i) - 48) * tenth;
tenth *= 10;
}
if(minus)
answer = 0 - answer;
return answer;
}
}
용빈님 풀이
class Solution {
public int solution(String s) {
int answer = Integer.parseInt(s);
return answer;
}
}
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 쉬운길을 생각 못한 내가 바보
내 풀이
class Solution {
public boolean solution(String s) {
if(s.length() == 4 || s.length() == 6) {
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) < 48 || s.charAt(i) > 57)
return false;
}
return true;
} else {
return false;
}
}
}
용빈님 풀이
class Solution {
public boolean d(String s){
boolean result = false;
if(s.length() == 4 || s.length() == 6){
try{
int test = Integer.parseInt(s);
result = true;
}catch(NumberFormatException e){
}
}
return result;
}
public boolean solution(String s) {
boolean answer = d(s);
return answer;
}
}
다른 접근법.. 신선했다.
내 풀이
class Solution {
public boolean solution(int x) {
int sum = 0;
StringBuilder sb = new StringBuilder();
sb.append(x);
String conversion = sb.toString();
for(int i = 0; i < sb.toString().length();i++)
sum += (int) conversion.charAt(i) - 48;
return x % sum == 0 ? true : false;
}
}
우진님 풀이
class Solution {
public boolean solution(int x) {
boolean answer = true;
int input = x;
int sum = 0;
while(input !=0){ //각 일의자리 십의자리 백의자리 를 구하는로직
sum += input % 10;
input /= 10;
}
if(x % sum !=0) //각자리수를 더한값과 입력한값을 나눈나머지에대한 판별
answer = false;
return answer;
}
}
저는 스트링 형태로 바꾸었는데 우진님은 바로 연산으로 푸셨네요.
비교적 쉬운 문제들이긴 했지만 팀원들과 함께해서 좀 더 재밌고 효율있게 학습한 것 같다. 정말 쉬운 문제들이라 역시 거의 풀이가 비슷했지만 위와 같이 가끔 다른 풀이법을 보면 도움이 되기도 하고 문제를 다르게 보는 시야도 생기는것 같다. 내일은 좀더 난이도 있는 문제들을 고민해보며 다같이 실력을 늘려 가봐야겠다.