알고리즘 문제풀이

[백준 18406] 럭키 스트레이트 (C++, Swift)

SiO2whocode 2024. 6. 20. 23:28
728x90

https://www.acmicpc.net/problem/18406

 

구현, 문자열

머선 문제냐 하면

123402 라는 문자열이 주어지면, 반갈죽!해서 양쪽 자릿수 합이 같은지 확인하는 문제임

같으면 LUCKY 출력, 다르면 READY 출력

*문자열은 늘 짝수자릿수 (즉 12345 같은 5자릿수 안들어옴)

 

123402

1+2+3 = 6, 4+0+2 = 6 이니 이건 LUCKY

 

접근방법

C++

for 문을 두개 써서 front, back 변수에 각각 앞부분의 합과 뒷부분의 합을 저장하고 둘을 비교함

swift

배열하나 두고, prefix, suffix로 배열 쪼개서 reduce로 합 구해서 바로 비교하고 출력 (고차함수 쓰고 싶어서 swift로도 풀었는데, string -> int 배열 만들려다가 고군분투함..)

 

오답노트

swift에서 readline으로 읽으면 string -> 그대로 배열로 쓸 수 있지만 character을 int로 바꿀때

wholeNumberValue 써야함! 세줄 코드 완성~!

- C++에서도 타입변환하려고 용쓰다가 그냥 char-'0'하는걸로 합의봄 (평안-)

- 삼항연산자는 cout 밖에 있어야한다

소스코드

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s;
    cin >> s;
    
    int front = 0;
    for(int i = 0; i < s.length()/2; i++){
        front += s[i]-'0';
    }
    
    int back = 0;
    for(int i = int(s.length()/2) ; i < s.length() ; i++){
        back += s[i]-'0';
    }
    
    front == back ? cout << "LUCKY" << endl : cout << "READY" << endl;
    
    return 0;
}
import Foundation

let inputs:String = readLine()!
let arr:[Int] = inputs.map { $0.wholeNumberValue! }
print(arr.prefix(arr.count/2).reduce(0) { $0 + $1 } == arr.suffix(arr.count/2).reduce(0) { $0 + $1 } ? "LUCKY" : "READY")
728x90