성장일기

내가 보려고 정리하는 공부기록

코딩테스트/프로그래머스 Lv.0

[프로그래머스] 수 조작하기1 - JAVA

와나나나 2023. 7. 7. 16:23
728x90

프로그래머스 _ 코딩 기초 트레이닝 DAY 6 - (2)

출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 |  정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

  • "w" : n이 1 커집니다.
  • "s" : n이 1 작아집니다.
  • "d" : n이 10 커집니다.
  • "a" : n이 10 작아집니다.

위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

 

입력 #1 |n = 0  control = "wsdawsdassw"

출력 #1 | -1


>> 풀이 <<

String 형태로 주어지는 control의 문자의 케이스를 나누어 비교해주었다. 비교는 if문을 쓰는 방법과 switch case 문을 쓰는 방법이 생각났다. 나는 if문을 이용하여 문제를 풀었다.

일단은 문자열의 문자를 뜯어내는(?) 작업을 해야하는데 방법은 여러 개가 있을 거 같다.

 

  1. 말그대로 문자열의 문자를 비교하기 -> charAt()
    • 문자를 비교하는 것이므로 control.charAt(i) == 'a' 이런식으로 하면 된다. 객체가 아니라서 valueOf를 쓸 필요가 없다.
  2. 문자열을 문자배열로 바꾸기 -> toCharArray()
    • 문자열.toCharArray() 로 쓰며, 문자열을 문자형 배열로 바꿔주는 역할을 한다. ex | Apple => [A,p,p,l,e]
  3. 문자열배열 새로 생성(쪼개기) -> split()
    • 문자열의 특정 부분을 이용해 그 부분을 기준으로 문자열을 나누는 역할을 한다. 그래서 보통 split("") 을 이용하면 문자 하나하나를 나누어 배열을 만들 수 있다.

나는 1번과 if문을 사용해 아래와 같은 코드를 작성했다.

class Solution {
    public int solution(int n, String control) {
        int answer = n;
        for (int i = 0 ; i < control.length() ; i++) {
            if (control.charAt(i) == 'w') answer++;
            else if (control.charAt(i) == 's') answer--;
            else if (control.charAt(i) == 'd') answer += 10;
            else if (control.charAt(i) == 'a') answer -= 10;
        }
        return answer;
    }
}