# 한줄 입력 

A, B = map(int, input().split())

A, B = map(int, input().split(','))

print(A + B)
# 두줄입력 
A = int(input())
B = int(input())

print(A + B)
# 여러줄 입력 , 몇줄이 입력될지 알 경우 

N = int(input)

for i in range(N):
    A, B = map(int, input().split())
    
    print(A + B)
# 여러 줄 입력 몇줄이 입력될지 모를 때 

while True:
    try:
    	a = input()
        print(a)
    except:
        break
# 여러줄 입력 마지막행을 알 때 
# ex) 마지막행은 둘 다 0 

While True:
	A, B = map(int, input().split())
    
    if A == 0 and B == 0:
    	break
    else:
    	print(A + B)

일단 내가 푼 코드, 

 

다른사람 풀이보니까 굳이 split 안하고 

[...rep] 이렇게하던데 참고좀 해야겠다... 

 

단점이 rep 로 넘어오는 str이 길면 길수록 속도가 느려진다.... 

쓸데없는 연산도 좀 많을것같기도하고 ,,, 결국 값 하나가 들어올때마다 0부터 5까지 i 가 순회해야하니까... 

function solution(rsp) {
    let a = rsp.split('')
    let b = ''
    
    for(let i = 0; i <= a.length; i++) {
        switch(a[i]) {
            case '2' :
                b += '0'
                break;
            case '0' :
                b += '5'
                break; 
            case '5':
                b += '2'
                break;
        }
    }
    return b
}

 

밑은 해답중에 객체 잘 사용한걸 가져왔는데 완전 좋은 방식이었다 

 

map을 통해 

arr[v] 로 넣으면 값이 튀어나오는건 아주 유용하게 써먹을 수 있을것같다... 

function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

 

생각은 그냥 뭐 넣으면 뭐 튀어나오게 하되 하나씩 집어넣자라는 생각을 하고 풀었다...

 

 

ㅋㅋㅋ아 진짜 ... 왜이렇게풀었지 ㅋㅋㅋ싶은문제 ㅋㅋㅋ 일단 깔끔한 수학문제 

    let x = Math.floor(hp/5);
    let y = Math.floor( (hp%5) / 3)    
    let z = Math.floor( ((hp%5)%3) / 1)
    
    return x+y+z

이렇게 하면 나오는 답을 ㅋㅋㅋ

 

function solution(hp) {
    let x = 5;
    let y = 3;
    let z = 1;
    let ans = 0;
    // 나머지값 찾기 
    let a = hp%5
    let b = a%3
    
    for(let i = x; i <= hp; i += x) {
        ans += 1
    }
    if (a !== 0) {
     for(let i = y; i <= a; i += y) {
        ans += 1
        }   
    }
    if (b !== 0) {
        for(let i = z; i <= b; i += z) {
            ans += 1
        }
    }
    return ans
}

이렇게 풀어버렸다... 정말 ...  뭐한거지....

for문 실행된숫자로 몇번 들어갔는지 체크하고 나머지값 연산해둔걸로 아래 for문들 돌리고 if 문으로 값이 0인지아닌지 감별하고... 뭐한거지....

 

여튼 그렇다....

수정본있음

function solution(my_string) {
  let a = my_string.split('')
  let array = [];

    array.push(a.filter(e => isNaN(e) === false))
   return array.flat().reduce((acc, cur) => parseInt(acc) + parseInt(cur))
}

프로그래머스 스쿨 0 단계 숨어있는 숫자의 덧셈이다

이것도 좀 오래묵혀놨었는데 다시푸니까 금방 풀렸다 

 

일단 my_string을 하나하나씩 잘라서 숫자들만 찾아야했고 split으로 잘라서 배열에 넣었다 

filter와 isNaN을 통해 숫자인지 아닌지 판별하였다 

 

isNaN은 Not a Number 라서 string형식으로 되어있어도 안에있는게 숫자면 false를 반환 글자면 true를 반환한다 

 

그리고 배열 상태가 중첩이라 [ [ val, val, val] ] flat() 을 사용해서 한겹으로 만들었는데 이건 굳이 중첩상태 안만들수 있었는데 하면서 수정했다 

 

function solution(my_string) {
  let a = my_string.split('')
  let array = a.filter(e => isNaN(e) === false)
  return array.reduce((acc, cur) => parseInt(acc) + parseInt(cur))    
}

훨씬 더 깔끔해졌다... 

 

마지막으로 filter와 isNaN을 통해 걸러낸 배열의 값들을 각각 더해야하는데 누산기능있는 reduce를 사용하였다

 

isNaN으로 안의 값이 int인지 str 인지 감별을 했다지만 아직 str형태이기때문에 parseInt를 통해서 int로 바꿔주었다. 

 

 

사고의 진행은..

이건 처음봤을때부터 어떤 방식으로 가야하겠다 하는게 바로바로 나와버려서 ... 딱히 쓸건없지만

일단 분리하자.. 그리고 걸러서 거른것만 더하자... 라는생각을 전제로 기억나는 함수들을 다 가져다 썼다... 

+ Recent posts