[TIL] 250905

๊น€์„ธํฌยท2025๋…„ 9์›” 5์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-09-05

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋งˆ๋ฒ• ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ
  • GAS - Effect

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋งˆ๋ฒ• ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
๋งˆ๋ฒ•์˜ ์„ธ๊ณ„์— ์‚ฌ๋Š” ๋ฏผ์ˆ˜๋Š” ์•„์ฃผ ๋†’์€ ํƒ‘์— ์‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ‘์ด ๋„ˆ๋ฌด ๋†’์•„์„œ ๊ฑธ์–ด ๋‹ค๋‹ˆ๊ธฐ ํž˜๋“  ๋ฏผ์ˆ˜๋Š” ๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ์˜ ๋ฒ„ํŠผ์€ ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ์—๋Š” -1, +1, -10, +10, -100, +100 ๋“ฑ๊ณผ ๊ฐ™์ด ์ ˆ๋Œ“๊ฐ’์ด 10c (c โ‰ฅ 0 ์ธ ์ •์ˆ˜) ํ˜•ํƒœ์ธ ์ •์ˆ˜๋“ค์ด ์ ํžŒ ๋ฒ„ํŠผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ์ธต ์ˆ˜์— ๋ฒ„ํŠผ์— ์ ํ˜€ ์žˆ๋Š” ๊ฐ’์„ ๋”ํ•œ ์ธต์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•ด ์žˆ๋Š” ์ธต๊ณผ ๋ฒ„ํŠผ์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฒฐ๊ณผ๊ฐ€ 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋Š” ์›€์ง์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฏผ์ˆ˜์˜ ์„ธ๊ณ„์—์„œ๋Š” 0์ธต์ด ๊ฐ€์žฅ ์•„๋ž˜์ธต์ด๋ฉฐ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋Š” ํ˜„์žฌ ๋ฏผ์ˆ˜๊ฐ€ ์žˆ๋Š” ์ธต์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋ฅผ ์›€์ง์ด๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ๋‹น ๋งˆ๋ฒ•์˜ ๋Œ ํ•œ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, 16์ธต์— ์žˆ๋Š” ๋ฏผ์ˆ˜๊ฐ€ 0์ธต์œผ๋กœ ๊ฐ€๋ ค๋ฉด -1์ด ์ ํžŒ ๋ฒ„ํŠผ์„ 6๋ฒˆ, -10์ด ์ ํžŒ ๋ฒ„ํŠผ์„ 1๋ฒˆ ๋ˆŒ๋Ÿฌ ๋งˆ๋ฒ•์˜ ๋Œ 7๊ฐœ๋ฅผ ์†Œ๋ชจํ•˜์—ฌ 0์ธต์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, +1์ด ์ ํžŒ ๋ฒ„ํŠผ์„ 4๋ฒˆ, -10์ด ์ ํžŒ ๋ฒ„ํŠผ 2๋ฒˆ์„ ๋ˆ„๋ฅด๋ฉด ๋งˆ๋ฒ•์˜ ๋Œ 6๊ฐœ๋ฅผ ์†Œ๋ชจํ•˜์—ฌ 0์ธต์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฒ•์˜ ๋Œ์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด ๋ฏผ์ˆ˜๋Š” ํ•ญ์ƒ ์ตœ์†Œํ•œ์˜ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ด๋™ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฏผ์ˆ˜๊ฐ€ ์–ด๋–ค ์ธต์—์„œ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋ฅผ ํƒ€๊ณ  0์ธต์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋Š”๋ฐ ํ•„์š”ํ•œ ๋งˆ๋ฒ•์˜ ๋Œ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฏผ์ˆ˜์™€ ๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์ธต์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ storey ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 0์ธต์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋งˆ๋ฒ•์˜ ๋Œ์˜ ์ตœ์†Œ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค storey โ‰ค 100,000,000

ํ’€์ด

#include <vector>
#include <cmath>

using namespace std;

int solution(int storey) {
    int answer = 0;
    // ๋ฐ˜์˜ฌ๋ฆผ ๊ณ ๋ ค
    while(storey>0)
    {
        int remainder = storey%10;
        if(remainder>5 || (remainder==5 && storey/10%10+1>5))
            remainder = 10-remainder;
        else    remainder *= -1;
        
        answer+=abs(remainder);
        storey+=remainder;
        
        storey/=10;
    }
    return answer;
}

GAS - Effect

GameplayEffect: ๊ฒŒ์ž„ ๋‚ด์˜ ๋ณ€ํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ

Effect ํƒ€์ž…

  • Instant : ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉฐ ์ฆ‰์‹œ ์†Œ๋ฉธ
  • Duration : ์ผ์ • ์‹œ๊ฐ„ ํšจ๊ณผ ์ง€์†, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™ ์†Œ๋ฉธ
  • Infinite : ์˜๊ตฌ ์ ์šฉ, ์ˆ˜๋™ ์ œ๊ฑฐ ํ•„์š”

Modifier ์—ฐ์‚ฐ ๋‹จ๊ณ„

Add -> Multiply -> Override ์ˆœ์œผ๋กœ ์—ฐ์‚ฐ

// ์—ฐ์‚ฐ์˜ ํƒ€์ž…
Modifier.ModifierOp = EGameplayModOp::Additive;
// ์—ฐ์‚ฐ์— ์ ์šฉ๋  ์ˆ˜์น˜
Modifier.ModifierMagnitude.SetValue(30.0f);  // +30

Cost / Cooldown

  • Cost Effect

    • ์ž์›(๋งˆ๋‚˜, ์Šคํƒœ๋ฏธ๋„ˆ ๋“ฑ)์„ ์ฆ‰์‹œ ์ฐจ๊ฐํ•˜๋Š” ์ดํŽ™ํŠธ
    • ์–ด๋นŒ๋ฆฌํ‹ฐ ์‹คํ–‰ ์‹œ์ ์— ์†Œ๋ชจ
  • Cooldown Effect

    • ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ค‘๋ณต ์‹คํ–‰์„ ์ฐจ๋‹จํ•˜๋Š” ์ดํŽ™ํŠธ
    • ์ฟจ๋‹ค์šด ํƒœ๊ทธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋™์ผ ํƒœ๊ทธ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์‹คํ–‰ ๋ถˆ๊ฐ€

์‹คํ–‰ ์‹œ์ ๋ณ„ ์ฐจ์ด

  • CanActivateAbility()

    • ์‹คํ–‰ ์‹œ๋„ ์ „ ๊ฒ€์‚ฌ
    • ํ˜„์žฌ ์ฟจ๋‹ค์šด ํƒœ๊ทธ๊ฐ€ ์ด๋ฏธ ์žˆ๊ฑฐ๋‚˜ ์ฝ”์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์‹คํ–‰ ์ž์ฒด๋ฅผ ๋ง‰์Œ โ†’ UX ์ฐจ์›์—์„œ "๋ˆŒ๋Ÿฌ๋„ ๋ฐœ๋™ ์•ˆ ๋จ"
  • Commit()

    • ์‹คํ–‰์ด ๊ฒฐ์ •๋œ ์งํ›„ ์ตœ์ข… ํ™•์ธ
    • ๋‹ค์‹œ ์ฝ”์ŠคํŠธ/์ฟจ๋‹ค์šด ๊ฒ€์ฆ ํ›„, ์‹ค์ œ ์ž์› ์†Œ๋ชจ ๋ฐ ์ฟจ๋‹ค์šด ์ดํŽ™ํŠธ ๋ถ€์—ฌ
    • ์„œ๋ฒ„ ๊ถŒ์œ„ ๋ณด์žฅ์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋‹จ๊ณ„

๐Ÿ‘‰ ์ฆ‰, CanActivateAbility๋Š” ์‚ฌ์ „ ํ•„ํ„ฐ, Commit์€ ์ตœ์ข… ํ™•์ • ๋ฐ ์‹ค์ œ ์ ์šฉ


Context / Spec

  • Context : ๋ˆ„๊ฐ€, ์–ด๋–ป๊ฒŒ ์ ์šฉํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด(์ถœ์ฒ˜, Instigator ๋“ฑ)
  • Spec : ์‹ค์ œ ์ ์šฉ๋  ์ดํŽ™ํŠธ์˜ ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ(์ˆ˜์น˜, ํƒœ๊ทธ, ์ง€์†์‹œ๊ฐ„ ๋“ฑ)

์›ํ•˜์‹œ๋ฉด ์ œ๊ฐ€ ์ด Cost / Cooldown ๋ถ€๋ถ„์„ TIL์— ๋งž๊ฒŒ ๊ทธ๋ฆผ(์‹คํ–‰ ํ๋ฆ„ ๋‹ค์ด์–ด๊ทธ๋žจ)์œผ๋กœ๋„ ์ •๋ฆฌํ•ด๋“œ๋ฆด๊นŒ์š”?


๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋งˆ๋ฒ• ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ
์ถœ์ฒ˜: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

0๊ฐœ์˜ ๋Œ“๊ธ€