pickerView는 label이나 button처럼 손쉽게 텍스트에 대한 접근을 할 수 없다.

생긴것부터가 배열이니 배열 전체에 대해 어떻게 해줄까를 정해줘야되서 그렇게 해둔듯 하다.

그러한 부분을 어떻게 할지를 정하는 함수가 pickerview에는 있다.

 

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?

 

라는 함수 인데

텍스트를 그냥 넣어 줄때 사용하는 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?

와 사용이 비슷하다.

 

아래는 빨간색으로 변경하는 예시를 플레이그라운드에서 만들어 보았다.

텍스트 설정을 변경하는 키값이 상당히 많은데 그중에서도

foregroundColor

를 사용했다.

 

위 소스를 플레이그라운드에서 돌리면 아래와 같이 나온다.

 

아래는 키들에 대한 애플문서이다.

https://developer.apple.com/documentation/foundation/nsattributedstring/key

 

Apple Developer Documentation

 

developer.apple.com

 

반응형

'iOS > swift' 카테고리의 다른 글

KeyboardObserver~  (0) 2021.10.19
Guide Swift Programming Language 5.5  (0) 2021.10.01
프로그래머스 - 프린터  (0) 2021.05.06
프로그래머스 - 기능개발  (0) 2021.05.05
프로그래머스 - 모의고사  (0) 2021.05.04

81. 콘솔에서 세 개의 정수( r, g, b )를 입력받고 세 수의 조합을 출력하고, 조합의 수를 출력하라.

입력 범위 : 0 ~ 128

출력:

0 ~ r-1, 0 ~ g-1, 0 ~ b-1 까지의 수의 조합을 모두 출력하고, 조합의 수를 출력

단, 출력할때는 오름차순으로 출력한다.

입력 예시

2 2 2

출력 예시

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

8

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int rColorMax = scan.nextInt();
		int gColorMax = scan.nextInt();
		int bColorMax = scan.nextInt();
		scan.close();
		
		int count = 0;
		for (int r = 0; r < rColorMax; r++) {
			for (int g = 0; g < gColorMax; g++) {
				for (int b = 0; b < bColorMax; b++) {
					System.out.println(r + " " + g + " " + b);
					count++;
				}
			}
		}
		System.out.println(count);
	}
}

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 3,
        let rColorMax = Int(valueArray.first!),
        let gColorMax = Int(valueArray[1]),
        let bColorMax = Int(valueArray[2])
    {
        var count = 0
        for r in 0 ..< rColorMax {
            for g in 0 ..< gColorMax {
                for b in 0 ..< bColorMax {
                    print("\(r) \(g) \(b)")
                    count += 1
                }//for:bColor
            }//for:gColor
        }//for:rColor
        print(count)
    }
}

이전 1081항 문제소스에서 살짝 수정했습니다.

https://codeup.kr/problem.php?id=1084

 

 

반응형

80. 콘솔에서 정수 하나를 입력받고 1부터 그 수까지 출력하라. 단 369게임에 해당하는 수는 X로 대신한다.

입력 범위 : 1 ~ 10

입력 예시

9

출력 예시

1 2 X 4 5 X 7 8 X

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int endNum = scan.nextInt();
		scan.close();
		
		for (int i = 1; i <= endNum; i++) {
			if(i%3 == 0 ) {
				System.out.print("X ");
			} else {
				System.out.print(i+" ");
			}
		}
	}
}

Swift 4.2

import Foundation

if let line = readLine(), let endNum = Int(line){
    for i in 1...endNum {
        if i % 3 == 0 { print("X", separator: " ", terminator: " ") }
        else { print(i, separator: " ", terminator: " ") }
    }
}

자바소스를 코드업에서 검사받을때 println으로 출력한것을 버튼 누르고 봐서 아차! 했는데

ok해주네요.

출력형식과 다른모양이건만...

스위프트에선 println 이 따로 없습니다.

print 구문은

print( 프린트할 여러 변수 , separator: , terminator: ) 로 구성되어있는데

separator 는 프린트할 변수 란에 여러개를 넣을경우에만 사용되고 하나만 넣을땐 있으나 마나입니다.

예를 들어 print("제가","바로","이렙니다", separator: "!", terminator:"") 로 해줄경우

출력이 제가!바로!이렙니다 로 나오게됩니다.

각 변수끼리의 구분을 뭘로 할꺼냐? 를 정하는녀석이죠.

그리고 뒤의 terminator는 끝날때 뭐를 붙일지 정하는 녀석입니다.

디폴트로 다음라인으로 넘어가게 되어있는지 print()만 입력시 바로 다음라인으로 가지요.

위에 예제를 다시 써보자면

print("제가","바로","이렙니다", separator: "!", terminator:"~~~~")

로입력시

출력은 제가!바로!이렙니다~~~~ 로 나오게됩니다.

콘솔에 출력하는걸 신경써야할일이 올지는 모르겠습니다만

알아두면 좋을듯싶습니다.

https://codeup.kr/problem.php?id=1083

반응형

79. 16진수로 된 구구단을 출력하려고 한다.

콘솔에서 영문자 하나를 입력받고, 맞는 단의 구구단을 출력하라.

입력 범위 : A ~ F

출력 : 모든 수는 16진수 대문자형식으로 출력

입력 예시

B

출력 예시

B*1=B

B*2=16

B*3=21

B*4=2C

B*5=37

B*6=42

B*7=4D

B*8=58

B*9=63

B*A=6E

B*B=79

B*C=84

B*D=8F

B*E=9A

B*F=A5

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		char floor = scan.next().charAt(0);
		scan.close();
		switch (floor) {
		case 'A':
			printGuGuDan(10);
			break;
		case 'B':
			printGuGuDan(11);
			break;
		case 'C':
			printGuGuDan(12);
			break;
		case 'D':
			printGuGuDan(13);
			break;
		case 'E':
			printGuGuDan(14);
			break;
		case 'F':
			printGuGuDan(15);
			break;
		default:
			break;
		}
	}
	static void printGuGuDan(int floor) {
		String strFloor = String.format("%X", floor);
		for (int i = 1; i < 16; i++) {
			int calc = i * floor;
			System.out.println(String.format("%X*%X=%X", floor,i,calc));
		}
	}
}

 

Swift 4.2

import Foundation

func printGuGuDan(floor:Int) {
    for i in 1...15 {
        let calc = i * floor
        print(String.init(format: "%X*%X=%X", floor, i, calc))
    }
}
if let line = readLine(), let floor = line.split(separator: " ").first{
    switch floor {
    case "A":
        printGuGuDan(floor: 10)
    case "B":
        printGuGuDan(floor: 11)
    case "C":
        printGuGuDan(floor: 12)
    case "D":
        printGuGuDan(floor: 13)
    case "E":
        printGuGuDan(floor: 14)
    case "F":
        printGuGuDan(floor: 15)
    default:break
    }
}

 

A ~ F 입력받은 수를 10진수로 어떻게 변환할까 고민하다가 귀찮아져서

그냥 스위치문로 일일이 넣어줬습니다

이글을 보시는분은 더 좋은 방법을 떠올릴시거라고 생각됩니다.

https://codeup.kr/problem.php?id=1082

 

 

반응형

78. 콘솔에서 두 정수( n, m )를 입력받는다. 각 수는 두 주사위의 가장 큰 값이다

( 주사위 1: 1 ~ n, 주사위 2: 1 ~ m) 두 주사위를 던질때 나올 수 있는 모든 경우의 수를 출력하라.​

입력 : 1Line 에 n,m이 공백을 두고 입력된다.

입력 범위 : 1 ~ 10

입력 예시

2 3

출력 예시

1 1

1 2

1 3

2 1

2 2

2 3

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int firstStopCount = scan.nextInt();
		int secondStopCount = scan.nextInt();
		scan.close();
		
		for (int first = 1; first <= firstStopCount; first++) {
			for (int second = 1; second <= secondStopCount; second++) {
				System.out.println(first + " " + second);
			}
		}
	}
}

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 2, let firstStopNum = Int(valueArray.first!), let secondStopNum = Int(valueArray[1]) {
        for first in 1...firstStopNum {
            for second in 1...secondStopNum {
                print("\(first) \(second)")
            }
        }
    }
}

 

 

문제를 읽기 시작했을때 쫄았습니다;;

주사위 라고 해서 정 4면체이든 6면체이든 주사위로서 존재 가능한(던질때 모든면이 나올 확률이 같은) 것에 대해 경우의 수를 뽑는줄알고요...

이과생이지만 수학에 약한 저로서는 여태 문법문제만 나와서 쉬엄쉬엄 타이핑 연습하듯이 놀고 있다가 어퍼컷맞은 기분이였어요.

그리고 밑의 입출력 읽고 안도의 숨을 내쉬었습니다.

그런문제가 아니였어요!

그냥 두수 받고 이중 반복문 돌리는 문제였습니다.

허탈...

https://codeup.kr/problem.php?id=1081

 

 

반응형

77. 콘솔에서 정수 하나를 입력받는다.

값이 0인 변수 x에 입력받은 정수보다 크거나 같을때 까지 1 + 2 + 3 + ... 한다했을때

마지막에 x 에 더해지는 값을 출력하시오.

입력 범위 : 0 ~ 1000

입력 예시

55

출력 예시

10

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int stopNum = scan.nextInt();
		scan.close();
		
		int totalValue = 0;
		int addValue = 0;
		while(totalValue < stopNum) totalValue += ++addValue;
		System.out.println(addValue);
	}
}

Swift 4.2

import Foundation

if let line = readLine(),let stopNum = Int(line) {
    var totalValue = 0
    var addValue = 0
    while totalValue < stopNum {
        addValue += 1
        totalValue += addValue
    }
    print(addValue)
}

 ​

https://codeup.kr/problem.php?id=1080

 

 

반응형

76. 콘솔에서 영문자 q가 입력될때까지 영문자를 입력받고 출력하라.

입력 범위 : a ~ z

입력 예시

x b k d l q g a c

출력 예시

x

b

k

d

l

q

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		char value = 'a';
		do {
			value = scan.next().charAt(0);
			System.out.println(value);
		} while(value != 'q');
		scan.close();		
	}
}

Swift 4.2

import Foundation

func searchAndPrint(line:String) -> Bool{
    var flag = true //q 이 입력되면 false
    let valueArray = line.split(separator: " ")
    for value in valueArray {
        if let temp = value.first{
            print(temp)
            if temp == "q" {
                flag = false
                break;
            }
        }
    }
    return flag //true : q 값이 존재, false : q 값이 없음
}

var flag = true //q 이 입력되거나 nil이 입력됬을경우 false
while flag {
    let line = readLine()
    if line != nil {
        flag = searchAndPrint(line: line!)
    } else {
        flag = false
    }
}

이전 1071항 문제의 코드에서 0을 q로 바꿔줬습니다.

https://codeup.kr/problem.php?id=1079

반응형

75. 콘솔에서 정수 한 개가 입력될때, 1 부터 그 수 까지의 짝수의 합을 출력하라.

입력 범위 : 1 ~ 100

입력 예시

5

출력 예시

6

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int endNumber = scan.nextInt();
		int printValue = 0;
		for (int i = 1; i <= endNumber; i++) {
			if(i%2 == 0 ) printValue += i;
		}
		System.out.println(printValue);
	}
}

 

Swift 4.2

import Foundation

let line = readLine();
if line != nil,let endNumber = Int(line!){
    var printNumber = 0
    for i in 1...endNumber {
        if i % 2 == 0 { printNumber += i }
    }
    print(printNumber)
}

https://codeup.kr/problem.php?id=1078

반응형

+ Recent posts