#027 수 조작하기 1

Hyejin Kim·2023년 5월 5일
0
post-thumbnail

문제

정수 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 함수를 완성해 주세요.

제한사항

-100,000 ≤ n ≤ 100,000
1 ≤ control의 길이 ≤ 100,000
control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

입출력 예

n control result
0 "wsdawsdassw" -1

입출력 예 설명

입출력 예 #1
수 n은 control에 따라 다음과 같은 순서로 변하게 됩니다.
0 → 1 → 0 → 10 → 0 → 1 → 0 → 10 → 0 → -1 → -2 → -1
따라서 -1을 return 합니다.


풀이 1

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, const char* control) {
     unsigned len = strlen(control);
  for (int i = 0; i < len; i++) {
    switch (control[i]) {
    case 'w': n++; break;
    case 's': n--; break;
    case 'd': n += 10; break;
    case 'a': n -= 10; break;
    default: break;
    }
  }
  printf("%i", n);
  return n;
}

for루프 와 switch문 사용하기

  • 먼저 control 문자열의 길이를 구한 후 for 루프를 사용하여 문자열의 모든 문자를 처리합니다.

  • switch문은 현재 처리 중인 문자를 평가하고, 해당하는 케이스로 분기합니다. 각 케이스에서는 해당 동작을 수행하고, break문으로 switch문에서 빠져나옵니다. 마지막으로, 처리되지 않은 경우에 대한 default 케이스를 추가하여 함수를 완성합니다.


풀이 2

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, const char* control) {
    char* ptr = control - 1;
    while(*++ptr) {
        if(*ptr == 'w') n++;
        else if(*ptr == 's') n--;
        else if(*ptr == 'd') n += 10;
        else if(*ptr == 'a') n -= 10;
    }
    return n;
}

포인터와 while 루프 사용하기

  • char* ptr = control - 1;은 ptr 포인터를 control 문자열의 바로 이전 위치인 -1로 초기화합니다. 이렇게 함으로써 while 루프의 첫 번째 반복에서 ptr은 control의 첫 번째 문자를 가리키도록 증가됩니다.

  • 그런 다음, while 루프의 조건식 *++ptr은 ptr을 먼저 증가시키고, 그 후에 ptr이 가리키는 문자를 평가합니다. 이렇게 함으로써 ptr이 가리키는 문자열에서 한 문자씩 순차적으로 처리할 수 있습니다.

  • 마지막으로 *ptr 이 NULL 캐릭터를 만나면 while 문은 종료됩니다.


문제 출처

코딩테스트

profile
Hello. I am a developer who is still developing.

0개의 댓글