알고리즘 문제풀이
[백준 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